Sha256: be00664f5de771ec309c8d0d3570ab411da5c2c172ee9a4df456b9af4210c0a4
Contents?: true
Size: 1.04 KB
Versions: 1
Compression:
Stored size: 1.04 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.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 private def config @config ||= Config.new end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cloudstrap-0.49.0.pre | lib/cloudstrap/network.rb |