Example #1
0
def upload_file(file: Path, s3_bucket: S3Bucket,
                supervisor_api: SupervisorAPI):
    slug = file.stem
    metadata = None
    try:
        snapshot_detail = supervisor_api.get_snapshot(slug)
        metadata_keys = ["type", "name", "date", "homeassistant"]
        metadata = {
            k: snapshot_detail[k]
            for k in snapshot_detail if k in metadata_keys
        }
    except SupervisorAPIError as err:
        logger.warning(
            f"Error getting snapshot info from Home Assistant Supervisor API : {err}"
        )

    s3_bucket.upload_file(str(file), metadata)
def upload_file(file: Path, s3_bucket: S3Bucket,
                supervisor_api: SupervisorAPI):
    slug = file.stem
    metadata = None
    try:
        snapshot_detail = supervisor_api.get_snapshot(slug)
        # DEBUG
        logger.debug(f"SNAPSHOT DETAIL: {snapshot_detail}")
        # metadata_keys = ["type", "name", "date", "homeassistant"]
        metadata_keys = ["type", "name", "date"]
        metadata = {
            k: snapshot_detail[k]
            for k in snapshot_detail if k in metadata_keys
        }
    except SupervisorAPIError as err:
        logger.warning(
            f"Error getting snapshot info from Home Assistant Supervisor API : {err}"
        )

    logger.info(f"Uploading {str(file)} [{metadata['name']}] to S3...")
    s3_bucket.upload_file(str(file), metadata)
    logger.info(f"Done.")
Example #3
0
def main():
    parser = argparse.ArgumentParser(description='Amazon S3 Backup.')
    parser.add_argument('config_file', help='JSON configuration file')
    args = parser.parse_args()

    try:
        config = read_config(args.config_file)
    except ConfigError as e:
        logger.exception("Error reading configuration file")
        sys.exit(1)

    logger.debug(config)

    logger.debug("Creating temporary tar file")
    tempfile = create_tempfile()

    try:
        create_tarfile(tempfile, config.get("sources"),
                       config.get("exclusions"))
    except TarFileCreationError as e:
        logger.error(f"Error creating tar file: {e}")
        sys.exit(1)

    tempfile.seek(0)  # Needed for S3 upload to work

    logger.debug("Creating S3 bucket object")
    s3_bucket = S3Bucket(
        config.get("s3").get("bucket_name"),
        config.get("s3").get("bucket_region"),
        config.get("s3").get("storage_class"))

    s3_metadata = {
        "sources": ",".join(config.get("sources")),
        "exclusions": ",".join(config.get("exclusions"))
    }
    s3_key = generate_s3_key(config.get("tarfile_name_prefix"))

    logger.info("Uploading file to S3")
    s3_bucket.upload_fileobj(tempfile, s3_key, s3_metadata)

    logger.debug("Closing temporary tar file")
    tempfile.close()

    logger.info("Done!")
Example #4
0
            f"Error getting snapshot info from Home Assistant Supervisor API : {err}"
        )

    s3_bucket.upload_file(str(file), metadata)


if __name__ == "__main__":
    set_log_level(os.environ.get("LOG_LEVEL"))

    try:
        config = Config()
    except ConfigError as err:
        logger.critical(f"Configuration error: {err}")
        sys.exit(1)

    s3_bucket = S3Bucket(config.bucket_name, config.bucket_region,
                         config.storage_class)

    supervisor_api = SupervisorAPI(os.getenv("SUPERVISOR_TOKEN"))

    bucket_contents = []
    try:
        bucket_contents = s3_bucket.list_bucket()
    except Exception:
        logger.critical("Error listing contents of S3 bucket!")
        sys.exit(1)

    local_files = [
        x.name for x in config.monitor_path.iterdir() if x.is_file()
    ]

    for local_file in local_files:
Example #5
0
 def __init__(self, n_buckets):
   self.buckets = []
   for _i in xrange(n_buckets):
     self.buckets.append(S3Bucket())
     sleep(1)