class Bosh::Director::DeploymentPlan::GlobalNetworkResolver
Public Class Methods
new(current_deployment, director_ips, logger)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 13 def initialize(current_deployment, director_ips, logger) @current_deployment = current_deployment @director_ips = director_ips || [] @logger = logger @range_combiner = CidrRangeCombiner.new end
Public Instance Methods
reserved_ranges()
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 20 def reserved_ranges return Set.new unless @current_deployment.using_global_networking? combined = reserved_legacy_ranges + director_reserved_ranges log_reserved_ranges(combined) combined end
Private Instance Methods
add_network(network_spec, ranges)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 69 def add_network(network_spec, ranges) type = safe_property(network_spec, 'type', :class => String, :default => 'manual') return unless type == 'manual' subnets = safe_property(network_spec, 'subnets', :class => Array) subnets.each do |subnet_spec| range_property = safe_property(subnet_spec, 'range', :class => String) range = NetAddr::CIDR.create(range_property) reserved_property = safe_property(subnet_spec, 'reserved', :optional => true) reserved_ranges = Set.new([range]) each_ip(reserved_property) do |unused_ip| reserved_ranges = remove_deployment_owned_addresses(unused_ip, reserved_ranges) end ranges.merge(reserved_ranges) end end
add_networks_from_deployment(deployment, ranges)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 62 def add_networks_from_deployment(deployment, ranges) networks = safe_property(Psych.load(deployment.manifest), 'networks', :class => Array, :default => []) networks.each do |network_spec| add_network(network_spec, ranges) end end
director_reserved_ranges()
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 29 def director_reserved_ranges Set.new(@director_ips.map { |ip| NetAddr::CIDR.create(ip) }) end
format_range_output_from_tuples(string_ip_tuples)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 53 def format_range_output_from_tuples(string_ip_tuples) range_strings = string_ip_tuples.map do |r| first = r[0] last = r[1] first == last ? first : "#{first}-#{last}" end range_strings.join(', ') end
log_reserved_ranges(cidr_ranges)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 47 def log_reserved_ranges(cidr_ranges) combined_range_tuples = @range_combiner.combine_ranges(cidr_ranges) output = format_range_output_from_tuples( combined_range_tuples ) @logger.info("Following networks and individual IPs are reserved by non-cloud-config deployments: #{output}") end
remove_deployment_owned_addresses(reserved_property_entry, reserved_ranges)
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 86 def remove_deployment_owned_addresses(reserved_property_entry, reserved_ranges) address_range = NetAddr::CIDRv4.new(reserved_property_entry) reserved_range_with_ip = reserved_ranges.find { |r| r.contains?(address_range) || r == address_range } reserved_ranges.delete(reserved_range_with_ip) if (!reserved_range_with_ip.nil?) && (reserved_range_with_ip != address_range) remainder = reserved_range_with_ip.remainder(address_range, Objectify: true) reserved_ranges.merge(Set.new(remainder)) end reserved_ranges end
reserved_legacy_ranges()
click to toggle source
# File lib/bosh/director/deployment_plan/global_network_resolver.rb, line 33 def reserved_legacy_ranges @cache ||= begin reserved_ranges = Set.new other_deployments = Models::Deployment.where(cloud_config_id: nil). exclude(name: @current_deployment.name). exclude(manifest: nil).all other_deployments.each do |deployment| add_networks_from_deployment(deployment, reserved_ranges) end reserved_ranges end end