Sha256: 7aa27ebb0841d0c5e9b5c443160c0e0168c85b9c34a26abd3740254ff41165dc
Contents?: true
Size: 1.1 KB
Versions: 9
Compression:
Stored size: 1.1 KB
Contents
require 'ipaddress' require_relative 'config' module Cloudstrap class Network def initialize(network = '10.0.0.0') @network = IPAddress(network).tap { |n| n.prefix = config.network_bits.to_i } self end attr_reader :network def subnets @subnets ||= network.subnet config.subnet_bits.to_i end def public @public ||= subnets.each_with_index.select { |_subnet, index| index.even? }.map(&:first) end def private @private ||= subnets.each_with_index.select { |_subnet, index| index.odd? }.map(&:first) 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 private def config @config ||= Config.new end end end
Version data entries
9 entries across 9 versions & 1 rubygems