class Akashi::Vpc::Subnet::Base
Public Class Methods
all()
click to toggle source
Calls superclass method
Akashi::Base::all
# File lib/akashi/vpc/subnet/base.rb, line 24 def all super.select { |subnet| base_cidr_block.include?(subnet.cidr_block) } end
cidr()
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 79 def cidr @cidr ||= 24 end
create(vpc:, availability_zone:)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 28 def create(vpc:, availability_zone:) response = Akashi::Aws.ec2.client.create_subnet( vpc_id: vpc.id, availability_zone: availability_zone, cidr_block: next_cidr_block(vpc: vpc).to_s + "/#{cidr}", ) new(response[:subnet][:subnet_id]).tap do |instance| instance.name = name(vpc: vpc) puts <<-EOS Created a Subnet (#{instance.id}) whose role is "#{role}". Availability zone is "#{instance.availability_zone_name}". EOS end end
current_number(vpc:)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 43 def current_number(vpc:) "%02d" % where(vpc_id: vpc.id).count end
latest_cidr_block(vpc:)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 56 def latest_cidr_block(vpc:) where(vpc_id: vpc.id).map(&:cidr_block).max end
name(vpc:)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 83 def name(vpc:) "#{Akashi.name}-#{role}-#{current_number(vpc: vpc)}" end
netmask()
click to toggle source
netmask_binary
#=> “11111111111111111111111100000000” netmask #=> IPAddr.new(4294967040, Socket::AF_INET) netmask.to_s #=> “255.255.255.0”
# File lib/akashi/vpc/subnet/base.rb, line 69 def netmask @netmask ||= IPAddr.new("0b#{netmask_binary}".oct, Socket::AF_INET) end
netmask_binary()
click to toggle source
cidr #=> 24 netmask_binary
#=> “11111111111111111111111100000000”
# File lib/akashi/vpc/subnet/base.rb, line 75 def netmask_binary @netmask_binary ||= ("1" * cidr).ljust(32, "0") end
next_cidr_block(vpc:)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 47 def next_cidr_block(vpc:) _latest_cidr_block = latest_cidr_block(vpc: vpc) IPAddr.new( _latest_cidr_block ? _latest_cidr_block.to_i + step : base_cidr_block.to_s, Socket::AF_INET, ) end
object_class()
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 91 def object_class @object_class ||= "Subnet" end
role()
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 87 def role self.to_s.demodulize.underscore.dasherize end
step()
click to toggle source
netmask #=> IPAddr.new(4294967040, Socket::AF_INET) step #=> 256
# File lib/akashi/vpc/subnet/base.rb, line 62 def step @step ||= (~netmask).succ.to_i end
Public Instance Methods
cidr_block()
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 10 def cidr_block IPAddr.new(@object.cidr_block) end
number()
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 14 def number name.slice(/(?<=-)\d{2}\Z/) end
route_table=(route_table)
click to toggle source
# File lib/akashi/vpc/subnet/base.rb, line 18 def route_table=(route_table) @object.route_table = route_table.id puts "A Subnet (#{id}) associated with a RouteTable (#{route_table.id})." end