class Bosh::Director::DeploymentPlan::PlacementPlanner::Plan

Public Class Methods

new(instance_plan_factory, network_planner, logger) click to toggle source
# File lib/bosh/director/deployment_plan/placement_planner/plan.rb, line 6
def initialize(instance_plan_factory, network_planner, logger)
  @instance_plan_factory = instance_plan_factory
  @network_planner = network_planner
  @logger = logger
end

Public Instance Methods

create_instance_plans(desired, existing, networks, availability_zones, job_name) click to toggle source
# File lib/bosh/director/deployment_plan/placement_planner/plan.rb, line 12
def create_instance_plans(desired, existing, networks, availability_zones, job_name)
  sorted_existing = existing.sort_by(&:index)
  instance_plans = assign_zones(desired, sorted_existing, networks, availability_zones, job_name)

  instance_plans.reject(&:obsolete?).each do |instance_plan|
    @logger.debug("Assigning az '#{instance_plan.desired_instance.availability_zone}' to instance '#{instance_plan.instance}'")
    instance_plan.instance.assign_availability_zone(instance_plan.desired_instance.az)
  end
  instance_plans
end

Private Instance Methods

assign_zones(desired, existing, networks, availability_zones, job_name) click to toggle source
# File lib/bosh/director/deployment_plan/placement_planner/plan.rb, line 25
def assign_zones(desired, existing, networks, availability_zones, job_name)
  if has_static_ips?(networks)
    @logger.debug("Job '#{job_name}' has networks with static IPs, placing instances based on static IP distribution")
    StaticIpsAvailabilityZonePicker.new(@instance_plan_factory, @network_planner, networks, job_name, availability_zones, @logger).place_and_match_in(desired, existing)
  else
    @logger.debug("Job '#{job_name}' does not have networks with static IPs, placing instances based on persistent disk allocation")
    AvailabilityZonePicker.new(@instance_plan_factory, @network_planner, networks, availability_zones).place_and_match_in(desired, existing)
  end
end
has_static_ips?(networks) click to toggle source
# File lib/bosh/director/deployment_plan/placement_planner/plan.rb, line 35
def has_static_ips?(networks)
  !networks.nil? && networks.any? { |network| !! network.static_ips }
end