Sha256: d7482de9d56795a249b15e1140d4eb437b9e96f5d4b7ef4a67b8fea4f86840cc

Contents?: true

Size: 1.6 KB

Versions: 4

Compression:

Stored size: 1.6 KB

Contents

require 'aws-sdk'

module Brillo
  module Transferrer
    class S3
      include Helpers::ExecHelper
      include Logger
      attr_reader :bucket, :filename, :region, :path, :enabled

      def initialize(config)
        @enabled              = config.transfer_config.enabled
        @bucket               = config.transfer_config.bucket
        @region               = config.transfer_config.region
        @filename             = config.compressed_filename
        @path                 = config.compressed_dump_path
        Aws.config.update(
          credentials: Aws::Credentials.new(
            config.transfer_config.access_key_id,
            config.transfer_config.secret_access_key
          ),
          region:             config.transfer_config.region
        )
      end

      def download
        return unless enabled
        logger.info("download #{path} from s3 #{bucket} #{filename}")
        FileUtils.rm path, force: true
        client.get_object({bucket: bucket, key: filename}, target: path)
      rescue Aws::S3::Errors::NoSuchBucket
        create_bucket
        retry
      end

      def upload
        return unless enabled
        logger.info("uploading #{path} to s3 #{bucket} #{filename}")
        object = resource.bucket(bucket).object(filename)
        object.upload_file(path)
      rescue Aws::S3::Errors::NoSuchBucket
        create_bucket
        retry
      end

      private

      def create_bucket
        client.create_bucket(bucket: bucket)
      end

      def client
        Aws::S3::Client.new
      end

      def resource
        Aws::S3::Resource.new
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
brillo-1.1.4 lib/brillo/transferrer/s3.rb
brillo-1.1.4.pre2 lib/brillo/transferrer/s3.rb
brillo-1.1.4.pre1 lib/brillo/transferrer/s3.rb
brillo-1.1.3 lib/brillo/transferrer/s3.rb