class StackMaster::AwsDriver::S3
Public Instance Methods
set_region(region)
click to toggle source
# File lib/stack_master/aws_driver/s3.rb, line 8 def set_region(region) @region = region @s3 = nil end
upload_files(bucket: nil, prefix: nil, region: nil, files: {})
click to toggle source
# File lib/stack_master/aws_driver/s3.rb, line 13 def upload_files(bucket: nil, prefix: nil, region: nil, files: {}) raise StackMaster::AwsDriver::S3ConfigurationError, 'A bucket must be specified in order to use S3' unless bucket return if files.empty? s3 = new_s3_client(region: region) current_objects = s3.list_objects( prefix: prefix, bucket: bucket ).map(&:contents).flatten.inject({}){|h,obj| h.merge(obj.key => obj) } StackMaster.stdout.puts "Uploading files to S3:" files.each do |template, file| body = file.fetch(:body) path = file.fetch(:path) object_key = template.dup object_key.prepend("#{prefix}/") if prefix compiled_template_md5 = Digest::MD5.hexdigest(body).to_s s3_md5 = current_objects[object_key] ? current_objects[object_key].etag.gsub("\"", '') : nil next if compiled_template_md5 == s3_md5 s3_uri = "s3://#{bucket}/#{object_key}" StackMaster.stdout.print "- #{File.basename(path)} => #{s3_uri} " s3.put_object( bucket: bucket, key: object_key, body: body, metadata: { md5: compiled_template_md5 } ) StackMaster.stdout.puts "done." end end
url(bucket:, prefix:, region:, template:)
click to toggle source
# File lib/stack_master/aws_driver/s3.rb, line 51 def url(bucket:, prefix:, region:, template:) if region == 'us-east-1' ["https://s3.amazonaws.com", bucket, prefix, template].compact.join('/') elsif region.start_with? "cn-" ["https://s3.#{region}.amazonaws.com.cn", bucket, prefix, template].compact.join('/') else ["https://s3-#{region}.amazonaws.com", bucket, prefix, template].compact.join('/') end end
Private Instance Methods
new_s3_client(region: nil)
click to toggle source
# File lib/stack_master/aws_driver/s3.rb, line 63 def new_s3_client(region: nil) Aws::S3::Client.new(region: region || @region) end