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