class Bosh::Director::DeploymentPlan::DynamicNetwork
Attributes
subnets[R]
Public Class Methods
check_validity_of_availability_zone(availability_zone, availability_zones, name)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 75 def self.check_validity_of_availability_zone(availability_zone, availability_zones, name) unless availability_zone.nil? || availability_zones.any? { |az| az.name == availability_zone } raise Bosh::Director::NetworkSubnetUnknownAvailabilityZone, "Network '#{name}' refers to an unknown availability zone '#{availability_zone}'" end end
new(name, subnets, logger)
click to toggle source
Calls superclass method
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 81 def initialize(name, subnets, logger) super(name, logger) @subnets = subnets end
parse(network_spec, availability_zones, logger)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 7 def self.parse(network_spec, availability_zones, logger) name = safe_property(network_spec, 'name', :class => String) Canonicalizer.canonicalize(name) logger = TaggedLogger.new(logger, 'network-configuration') dns_manager = DnsManagerProvider.create validate_network_has_no_key('az', name, network_spec) validate_network_has_no_key('azs', name, network_spec) if network_spec.has_key?('subnets') validate_network_has_no_key_while_subnets_present('dns', name, network_spec) validate_network_has_no_key_while_subnets_present('cloud_properties', name, network_spec) subnets = network_spec['subnets'].map do |subnet_properties| dns_spec = safe_property(subnet_properties, 'dns', :class => Array, :optional => true) dns = dns_manager.dns_servers(subnet_properties['name'], dns_spec) cloud_properties = safe_property(subnet_properties, 'cloud_properties', class: Hash, default: {}) subnet_availability_zones = parse_availability_zones(subnet_properties, availability_zones, name) DynamicNetworkSubnet.new(dns, cloud_properties, subnet_availability_zones) end else cloud_properties = safe_property(network_spec, 'cloud_properties', class: Hash, default: {}) dns_spec = safe_property(network_spec, 'dns', :class => Array, :optional => true) dns = dns_manager.dns_servers(network_spec['name'], dns_spec) subnets = [DynamicNetworkSubnet.new(dns, cloud_properties, nil)] end new(name, subnets, logger) end
parse_availability_zones(spec, availability_zones, name)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 50 def self.parse_availability_zones(spec, availability_zones, name) has_availability_zones_key = spec.has_key?('azs') has_availability_zone_key = spec.has_key?('az') if has_availability_zone_key && has_availability_zones_key raise Bosh::Director::NetworkInvalidProperty, "Network '#{name}' contains both 'az' and 'azs'. Choose one." end if has_availability_zones_key subnet_availability_zones = safe_property(spec, 'azs', class: Array, optional: true) if subnet_availability_zones.empty? raise Bosh::Director::NetworkInvalidProperty, "Network '#{name}' refers to an empty 'azs' array" end subnet_availability_zones.each do |zone| check_validity_of_availability_zone(zone, availability_zones, name) end subnet_availability_zones else availability_zone = safe_property(spec, 'az', class: String, optional: true) check_validity_of_availability_zone(availability_zone, availability_zones, name) availability_zone.nil? ? nil : [availability_zone] end end
validate_network_has_no_key(key, name, network_spec)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 44 def self.validate_network_has_no_key(key, name, network_spec) if network_spec.has_key?(key) raise NetworkInvalidProperty, "Network '#{name}' must not specify '#{key}'." end end
validate_network_has_no_key_while_subnets_present(key, name, network_spec)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 37 def self.validate_network_has_no_key_while_subnets_present(key, name, network_spec) if network_spec.has_key?(key) raise NetworkInvalidProperty, "Network '#{name}' must not specify '#{key}' when also specifying 'subnets'. " + "Instead, '#{key}' should be specified on subnet entries." end end
Public Instance Methods
find_az_names_for_ip(ip)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 131 def find_az_names_for_ip(ip) # On dynamic network ip does not belong to any subnet availability_zones end
network_settings(reservation, default_properties = Network::VALID_DEFAULTS, availability_zone = nil)
click to toggle source
Returns the network settings for the specific reservation.
@param [NetworkReservation] reservation @param [Array<String>] default_properties @param [AvailabilityZone] availability zone @return [Hash] network settings that will be passed to the BOSH Agent
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 95 def network_settings(reservation, default_properties = Network::VALID_DEFAULTS, availability_zone = nil) unless reservation.dynamic? raise NetworkReservationWrongType, "IP '#{format_ip(reservation.ip)}' on network '#{reservation.network.name}' does not belong to dynamic pool" end if availability_zone.nil? subnet = subnets.first else subnet = find_subnet_for_az(availability_zone.name) unless subnet raise NetworkSubnetInvalidAvailabilityZone, "Network '#{name}' has no matching subnet for availability zone '#{availability_zone.name}'" end end config = { "type" => "dynamic", "cloud_properties" => subnet.cloud_properties } config["dns"] = subnet.dns if subnet.dns if default_properties config["default"] = default_properties.sort end config end
validate_reference_from_job!(job_network_spec, job_name)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 124 def validate_reference_from_job!(job_network_spec, job_name) if job_network_spec.has_key?('static_ips') raise JobStaticIPNotSupportedOnDynamicNetwork, "Instance group '#{job_name}' using dynamic network '#{name}' cannot specify static IP(s)" end end
Private Instance Methods
find_subnet_for_az(az_name)
click to toggle source
# File lib/bosh/director/deployment_plan/dynamic_network.rb, line 138 def find_subnet_for_az(az_name) @subnets.find { |subnet| subnet.availability_zone_names.include?(az_name) } end