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

Version Path
cloudstrap-0.48.15.pre lib/cloudstrap/network.rb
cloudstrap-0.48.2.pre lib/cloudstrap/network.rb
cloudstrap-0.48.0.pre lib/cloudstrap/network.rb
cloudstrap-0.47.8.pre lib/cloudstrap/network.rb
cloudstrap-0.47.7.pre lib/cloudstrap/network.rb
cloudstrap-0.47.2.pre lib/cloudstrap/network.rb
cloudstrap-0.47.0.pre lib/cloudstrap/network.rb
cloudstrap-0.46.7.pre lib/cloudstrap/network.rb
cloudstrap-0.46.4.pre lib/cloudstrap/network.rb
cloudstrap-0.46.3.pre lib/cloudstrap/network.rb
cloudstrap-0.46.1.pre lib/cloudstrap/network.rb
cloudstrap-0.46.0.pre lib/cloudstrap/network.rb
cloudstrap-0.45.2.pre lib/cloudstrap/network.rb
cloudstrap-0.45.0.pre lib/cloudstrap/network.rb
cloudstrap-0.44.0.pre lib/cloudstrap/network.rb
cloudstrap-0.43.2.pre lib/cloudstrap/network.rb
cloudstrap-0.43.0.pre lib/cloudstrap/network.rb
cloudstrap-0.42.9.pre lib/cloudstrap/network.rb
cloudstrap-0.42.4.pre lib/cloudstrap/network.rb
cloudstrap-0.42.3.pre lib/cloudstrap/network.rb