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

Version Path
cloudstrap-0.51.1.pre lib/cloudstrap/network.rb
cloudstrap-0.50.1.pre lib/cloudstrap/network.rb
cloudstrap-0.49.12.pre lib/cloudstrap/network.rb
cloudstrap-0.49.11.pre lib/cloudstrap/network.rb
cloudstrap-0.49.10.pre lib/cloudstrap/network.rb
cloudstrap-0.49.8.pre lib/cloudstrap/network.rb
cloudstrap-0.49.4.pre lib/cloudstrap/network.rb
cloudstrap-0.49.2.pre lib/cloudstrap/network.rb
cloudstrap-0.49.1.pre lib/cloudstrap/network.rb