Sha256: 19a334a35d3a3ffea211642e2c9621c91395f5841fb58a026e7f667e93bc2db4
Contents?: true
Size: 933 Bytes
Versions: 31
Compression:
Stored size: 933 Bytes
Contents
require 'ipaddress' module Cloudstrap class Network def initialize(network = '10.0.0.0') @network = IPAddress(network).tap { |n| n.prefix = 16 } self end attr_reader :network def subnets @subnets ||= network.subnet 24 end def public @public ||= subnets.select { |subnet| subnet.octet(2).even? } end def private @private ||= subnets.select { |subnet| subnet.octet(2).odd? } end def public_layout(*zones) zones .zip(public.take(zones.size)) .map { |zone, subnet| [zone, "#{subnet}/#{subnet.prefix}"] } .to_h end def private_layout(*zones) zones .zip(private.take(zones.size)) .map { |zone, subnet| [zone, "#{subnet}/#{subnet.prefix}"] } .to_h end def layout(*zones) { public: public_layout(*zones), private: private_layout(*zones) } end end end
Version data entries
31 entries across 31 versions & 1 rubygems