class Hygroscope::Payload
Attributes
archive[R]
bucket[R]
key[R]
path[R]
prefix[W]
Public Class Methods
new(path, region, profile)
click to toggle source
# File lib/hygroscope/payload.rb, line 9 def initialize(path, region, profile) @path = path @region = region @profile = profile @credentials = Aws::SharedCredentials.new(profile_name: @profile) # TODO: This will fail if using root creds or lacking GetUser priv, # neither of which should be the case when using hygroscope -- but # we should check and error before getting to this point. @account_id = Aws::IAM::Client.new(region: @region, credentials: @credentials).get_user.user.arn.split(':')[4] @region = ENV['AWS_REGION'] || 'us-east-1' @bucket = "hygroscope-payloads-#{@account_id}-#{@region}" @name = "payload-#{Time.new.to_i}.zip" @client = Aws::S3::Client.new(region: @region, credentials: @credentials) end
Public Instance Methods
create_bucket()
click to toggle source
# File lib/hygroscope/payload.rb, line 34 def create_bucket # Returns success if bucket already exists @client.create_bucket(bucket: @bucket, acl: 'private') end
generate_url(_timeout = 3600)
click to toggle source
# File lib/hygroscope/payload.rb, line 63 def generate_url(_timeout = 3600) signer = Aws::S3::Presigner.new(client: @client) signer.presigned_url(:get_object, bucket: @bucket, key: key) end
prefix()
click to toggle source
# File lib/hygroscope/payload.rb, line 26 def prefix @prefix || File.dirname(File.dirname(@path)) end
prepare()
click to toggle source
# File lib/hygroscope/payload.rb, line 39 def prepare archive_path = File.join(Dir.tmpdir, @name) Archive::Zip.archive(archive_path, "#{@path}/.") @archive = File.open(archive_path) at_exit { File.unlink(@archive) } end
send()
click to toggle source
# File lib/hygroscope/payload.rb, line 47 def send @client.put_object( bucket: @bucket, key: key, body: @archive ) end
upload!()
click to toggle source
# File lib/hygroscope/payload.rb, line 55 def upload! create_bucket prepare send "s3://#{@bucket}/#{key}" end