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