class Awsom::Subnet
Public Class Methods
new(name, cidr:, az:, vpc_id:)
click to toggle source
# File lib/awsom/subnet.rb, line 8 def initialize(name, cidr:, az:, vpc_id:) @vpc_id = vpc_id @name = name @cidr = cidr @az = az end
Public Instance Methods
created()
click to toggle source
# File lib/awsom/subnet.rb, line 21 def created id = find_id if id subnet = subnet(id) tag(subnet) if not tagged?(subnet) return id end create end
id()
click to toggle source
# File lib/awsom/subnet.rb, line 15 def id id = find_id error "specified subnet #{@name} doesn't exist in vpc #{@vpc_id}" if not id id end
Private Instance Methods
create()
click to toggle source
# File lib/awsom/subnet.rb, line 33 def create resp = Ec2.create_subnet( vpc_id: @vpc_id, cidr_block: @cidr, availability_zone: @availability_zone ) logger.info "(#{@name}) created subnet: #{@cidr}" id = resp.subnet.subnet_id subnet = subnet(id) tag(subnet) id rescue Aws::Errors::ServiceError, ArgumentError raise Error, "while creating subnet #{@name}" end
find_id()
click to toggle source
# File lib/awsom/subnet.rb, line 73 def find_id filters = [ { name: "vpc-id", values: [@vpc_id.to_s] }, { name: "cidr", values: [@cidr.to_s] } ] result = Ec2.describe_subnets(filters: filters) num_results = result.subnets.size raise Error, "mulitple subnets found with name #{@name}" if num_results > 1 if num_results == 1 subnet = result.subnets.first verify(subnet) result.subnets.first.subnet_id else false end end
subnet(id)
click to toggle source
# File lib/awsom/subnet.rb, line 48 def subnet(id) Aws::EC2::Subnet.new(id) end
tag(subnet)
click to toggle source
# File lib/awsom/subnet.rb, line 52 def tag(subnet) return if tagged?(subnet) subnet.create_tags( tags: [ { key: "Name", value: @name } ] ) subnet.load end
tagged?(subnet)
click to toggle source
# File lib/awsom/subnet.rb, line 60 def tagged?(subnet) subnet.tags.any? { |tag| tag.key == "Name"} end
verify(subnet)
click to toggle source
# File lib/awsom/subnet.rb, line 64 def verify(subnet) error "availability zone mismatch for subnet #{@name}" if subnet.availability_zone != @az name_tag = subnet.tags.find { |tag| tag.key == "Name" } return if not name_tag if name_tag.value != @name raise Error, "subnet #{@name} already tagged with another name #{name_tag}" end end