class Forger::S3::Bucket
Constants
- STACK_NAME
Public Class Methods
ensure_exists!()
click to toggle source
# File lib/forger/s3/bucket.rb, line 22 def ensure_exists! bucket = new return if bucket.exist? bucket.create end
name()
click to toggle source
# File lib/forger/s3/bucket.rb, line 11 def name return @@name if @@name # only memoize once bucket has been created stack = new.find_stack return unless stack resp = cfn.describe_stack_resources(stack_name: STACK_NAME) bucket = resp.stack_resources.find { |r| r.logical_resource_id == "Bucket" } @@name = bucket.physical_resource_id # actual bucket name end
new(options={})
click to toggle source
# File lib/forger/s3/bucket.rb, line 29 def initialize(options={}) @options = options end
Public Instance Methods
bucket_name()
click to toggle source
# File lib/forger/s3/bucket.rb, line 46 def bucket_name self.class.name end
create()
click to toggle source
Launches a cloudformation to create an s3 bucket
# File lib/forger/s3/bucket.rb, line 59 def create puts "Creating #{STACK_NAME} stack with the s3 bucket" cfn.create_stack(stack_name: STACK_NAME, template_body: template_body) status = CfnStatus.new(STACK_NAME) status.wait end
delete()
click to toggle source
# File lib/forger/s3/bucket.rb, line 73 def delete are_you_sure? puts "Deleting #{STACK_NAME} stack with the s3 bucket" empty_bucket! cfn.delete_stack(stack_name: STACK_NAME) end
deploy()
click to toggle source
# File lib/forger/s3/bucket.rb, line 33 def deploy stack = find_stack if stack update else create end end
exist?()
click to toggle source
# File lib/forger/s3/bucket.rb, line 42 def exist? !!bucket_name end
find_stack()
click to toggle source
# File lib/forger/s3/bucket.rb, line 81 def find_stack resp = cfn.describe_stacks(stack_name: STACK_NAME) resp.stacks.first rescue Aws::CloudFormation::Errors::ValidationError nil end
show()
click to toggle source
# File lib/forger/s3/bucket.rb, line 50 def show if bucket_name puts "Forger bucket name: #{bucket_name}" else puts "Forger bucket does not exist yet." end end
update()
click to toggle source
# File lib/forger/s3/bucket.rb, line 66 def update puts "Updating #{STACK_NAME} stack with the s3 bucket" cfn.update_stack(stack_name: STACK_NAME, template_body: template_body) rescue Aws::CloudFormation::Errors::ValidationError => e raise unless e.message.include?("No updates are to be performed") end
Private Instance Methods
are_you_sure?()
click to toggle source
# File lib/forger/s3/bucket.rb, line 107 def are_you_sure? return true if @options[:sure] puts "Are you sure you want the forger bucket #{bucket_name.color(:green)} to be emptied and deleted? (y/N)" sure = $stdin.gets.strip yes = sure =~ /^Y/i unless yes puts "Phew that was close." exit end end
empty_bucket!()
click to toggle source
# File lib/forger/s3/bucket.rb, line 90 def empty_bucket! resp = s3.list_objects(bucket: bucket_name) if resp.contents.size > 0 # IE: objects = [{key: "objectkey1"}, {key: "objectkey2"}] objects = resp.contents.map { |item| {key: item.key} } s3.delete_objects( bucket: bucket_name, delete: { objects: objects, quiet: false, } ) empty_bucket! # keep deleting objects until bucket is empty end end
template_body()
click to toggle source
# File lib/forger/s3/bucket.rb, line 119 def template_body <<~YAML Resources: Bucket: Type: AWS::S3::Bucket Properties: Tags: - Key: Name Value: forger YAML end