class Bosh::Director::DeploymentPlan::Steps::UpdateStep

Public Class Methods

new(base_job, deployment_plan, multi_job_updater, cloud) click to toggle source
# File lib/bosh/director/deployment_plan/steps/update_step.rb, line 5
def initialize(base_job, deployment_plan, multi_job_updater, cloud)
  @base_job = base_job
  @logger = base_job.logger
  @cloud = cloud
  @deployment_plan = deployment_plan
  @multi_job_updater = multi_job_updater
  @vm_deleter = Bosh::Director::VmDeleter.new(@cloud, @logger, false, Config.enable_virtual_delete_vms)
  @disk_manager = DiskManager.new(@cloud, @logger)
  job_renderer = JobRenderer.create
  arp_flusher = ArpFlusher.new
  @vm_creator = Bosh::Director::VmCreator.new(@cloud, @logger, @vm_deleter, @disk_manager, job_renderer, arp_flusher)
end

Public Instance Methods

perform() click to toggle source
# File lib/bosh/director/deployment_plan/steps/update_step.rb, line 18
def perform
  begin
    @logger.info('Updating deployment')
    assemble
    update_jobs
    @logger.info('Committing updates')
    @deployment_plan.persist_updates!
    @logger.info('Finished updating deployment')
  ensure
    @deployment_plan.update_stemcell_references!
  end
end

Private Instance Methods

assemble() click to toggle source
# File lib/bosh/director/deployment_plan/steps/update_step.rb, line 33
def assemble
  @logger.info('Deleting no longer needed instances')
  delete_unneeded_instances

  @logger.info('Creating missing VMs')
  # TODO: something about instance_plans.select(&:new?) -- how does that compare to the isntance#has_vm? check?
  @vm_creator.create_for_instance_plans(@deployment_plan.instance_plans_with_missing_vms, @deployment_plan.ip_provider)

  @base_job.task_checkpoint
end
delete_unneeded_instances() click to toggle source
# File lib/bosh/director/deployment_plan/steps/update_step.rb, line 53
def delete_unneeded_instances
  unneeded_instances = @deployment_plan.unneeded_instances
  if unneeded_instances.empty?
    @logger.info('No unneeded instances to delete')
    return
  end
  event_log_stage = Config.event_log.begin_stage('Deleting unneeded instances', unneeded_instances.size)
  dns_manager = DnsManagerProvider.create
  instance_deleter = InstanceDeleter.new(@deployment_plan.ip_provider, dns_manager, @disk_manager)
  unneeded_instance_plans = unneeded_instances.map do |instance|
    DeploymentPlan::InstancePlan.new(
      existing_instance: instance,
      instance: nil,
      desired_instance: nil,
      network_plans: [],
      recreate_deployment: @deployment_plan.recreate
    )
  end
  instance_deleter.delete_instance_plans(unneeded_instance_plans, event_log_stage)
  @logger.info('Deleted no longer needed instances')
end
update_jobs() click to toggle source
# File lib/bosh/director/deployment_plan/steps/update_step.rb, line 44
def update_jobs
  @logger.info('Updating jobs')
  @multi_job_updater.run(
    @base_job,
    @deployment_plan,
    @deployment_plan.jobs_starting_on_deploy,
  )
end