class Ec2::Subnet
Public Class Methods
new(name, vpc_id: nil)
click to toggle source
# File lib/ec2/subnet.rb, line 9 def initialize(name, vpc_id: nil) error "vpc_id not specified for subnet" if not vpc_id @vpc_id = vpc_id.to_s @name = name.to_s end
Public Instance Methods
created(&block)
click to toggle source
# File lib/ec2/subnet.rb, line 21 def created(&block) instance_eval &block load_id using_cidr: true if exists? tag if not tagged? verify else create tag end end
id!()
click to toggle source
# File lib/ec2/subnet.rb, line 15 def id! load_id if not @id error "specified subnet #{@name} doesn't exist in vpc #{@vpc_id}" if not exists? @id end
Private Instance Methods
availability_zone(availability_zone)
click to toggle source
# File lib/ec2/subnet.rb, line 72 def availability_zone(availability_zone) @availability_zone = availability_zone end
Also aliased as: az
cidr(cidr)
click to toggle source
# File lib/ec2/subnet.rb, line 68 def cidr(cidr) @cidr = cidr end
create()
click to toggle source
# File lib/ec2/subnet.rb, line 39 def create resp = ec2.create_subnet( vpc_id: @vpc_id, cidr_block: @cidr, availability_zone: @availability_zone ) @id = resp.subnet.subnet_id logger.info "(#{@name}) created subnet: #{@cidr}" rescue Aws::Errors::ServiceError, ArgumentError error "while creating subnet #{@name}" end
ec2()
click to toggle source
# File lib/ec2/subnet.rb, line 98 def ec2 @ec2 ||= begin @region ? Aws::EC2::Client.new(region: @region) : Aws::EC2::Client.new end end
exists?()
click to toggle source
# File lib/ec2/subnet.rb, line 94 def exists? @id end
load_id(using_cidr: false)
click to toggle source
# File lib/ec2/subnet.rb, line 79 def load_id(using_cidr: false) filters = [] if using_cidr filters << { name: "cidr", values: [@cidr.to_s] } else filters << { name: "tag:Name", values: [@name.to_s] } end filters << { name: "vpc-id", values: [@vpc_id.to_s] } result = ec2.describe_subnets(filters: filters) error "mulitple subnets found with name #{@name}" if result.subnets.size > 1 @id = result.subnets.first.subnet_id if result.subnets.size == 1 end
subnet()
click to toggle source
# File lib/ec2/subnet.rb, line 35 def subnet @subnet ||= ::Aws::EC2::Subnet.new(@id) end
tag()
click to toggle source
# File lib/ec2/subnet.rb, line 51 def tag subnet.create_tags( tags: [ { key: "Name", value: @name } ] ) subnet.load end
tagged?()
click to toggle source
# File lib/ec2/subnet.rb, line 58 def tagged? subnet.tags.any? { |tag| tag.key == "Name"} end
verify()
click to toggle source
# File lib/ec2/subnet.rb, line 62 def verify name_tag = subnet.tags.find { |tag| tag.key == "Name" }.value error "availability zone mismatch for subnet #{@name}" if subnet.availability_zone != @availability_zone error "subnet #{@name} already tagged with another name #{name_tag}" if @name != name_tag end