class Proxy::DHCP::Infoblox::UnusedIps

Attributes

connection[R]
use_ranges[R]

Public Class Methods

new(connection, use_ranges) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 9
def initialize(connection, use_ranges)
  @connection = connection
  @use_ranges = use_ranges
  @memoized_network = nil
end

Public Instance Methods

excluded_ips(subnet_address, from, to) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 27
def excluded_ips(subnet_address, from, to)
  return [] if from.nil? || to.nil?
  (IPAddr.new(network_cidr_to_range(subnet_address).first)..IPAddr.new(network_cidr_to_range(subnet_address).last)).to_a.map(&:to_s) -
      (IPAddr.new(from)..IPAddr.new(to)).to_a.map(&:to_s)
end
find_network(network_address) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 40
def find_network(network_address)
  return @memoized_network if !@memoized_network.nil? && @memoized_address == network_address
  @memoized_address = network_address
  @memoized_network = ::Infoblox::Network.find(@connection, 'network~' => network_address, '_max_results' => 1).first
  raise "Subnet #{network_address} not found" if @memoized_network.nil?
  @memoized_network
end
find_range(network_address, from, to) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 33
def find_range(network_address, from, to)
  ranges = ::Infoblox::Range.find(@connection, 'network~' => network_address)
  range = (from.nil? || to.nil?) ? ranges.first : ranges.find {|r| r.start_addr == from && r.end_addr == to}
  raise "No Ranges found for #{network_address} network" if range.nil?
  range
end
unused_ip(network_address, from_ip_address, to_ip_address) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 15
def unused_ip(network_address, from_ip_address, to_ip_address)
  @use_ranges ? unused_range_ip(network_address, from_ip_address, to_ip_address) : unused_network_ip(network_address, from_ip_address, to_ip_address)
end
unused_network_ip(network_address, from_ip_address, to_ip_address) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 19
def unused_network_ip(network_address, from_ip_address, to_ip_address)
  find_network(network_address).next_available_ip(1, excluded_ips(find_network(network_address).network, from_ip_address, to_ip_address)).first
end
unused_range_ip(network_address, from_ip_address, to_ip_address) click to toggle source
# File lib/smart_proxy_dhcp_infoblox/unused_ips.rb, line 23
def unused_range_ip(network_address, from_ip_address, to_ip_address)
  find_range(network_address, from_ip_address, to_ip_address).next_available_ip(1).first
end