class AwsRds::SecurityGroup

Public Class Methods

find_or_create(name) click to toggle source
# File lib/aws_rds/security_group.rb, line 47
def self.find_or_create(name)
  new.find_or_create(name)
end

Public Instance Methods

fallback_vpc_id() click to toggle source
# File lib/aws_rds/security_group.rb, line 30
    def fallback_vpc_id
      AwsRds.config["fallback"]["vpc_id"]
    rescue NoMethodError => e
      puts "ERROR: a vpc_id was not specified.".colorize(:red)
      puts <<-EOL
No vpc_id was specified in your profile. Also, a fallback vpc_id was set.

Please add a vpc_id in your profile file or add a fallback vpc_id to your config/#{AwsRds.env}.yml.

To specify a fallback vpc_id setting. Example config/#{AwsRds.env}.yml:
---
fallback:
  vpc_id: vpc-123
EOL
      exit 1
    end
find_or_create(name) click to toggle source

Returns Aws::EC2::Types::SecurityGroup

# File lib/aws_rds/security_group.rb, line 6
def find_or_create(name)
  resp = ec2.describe_security_groups(
    filters: [
      {name: 'vpc-id', values: [fallback_vpc_id]},
      {name: 'group-name', values: [name]}]
    )
  sg = resp.security_groups.first
  return sg if sg

  puts "Creating security group #{name}".colorize(:green)
  result = ec2.create_security_group(
    group_name: name,
    description: name,
    vpc_id: fallback_vpc_id,
  )
  # TODO: add waiter
  # ec2.create_tags(
  #   resources: [result.group_id],
  #   tags: [{ key: "Name", value: name }],
  # )
  resp = ec2.describe_security_groups(group_ids: [result.group_id])
  resp.security_groups.first
end