class Bosh::Director::DeploymentPlan::InstanceProvider

Public Class Methods

new(deployment_plan, vm_creator, logger) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 105
def initialize(deployment_plan, vm_creator, logger)
  @deployment_plan = deployment_plan
  @vm_creator = vm_creator
  @logger = logger
end

Public Instance Methods

create_instance(instance_plan) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 141
def create_instance(instance_plan)
  instance_model = instance_plan.instance.model
  parent_id = add_event(instance_model.deployment.name, instance_model.name)
  @deployment_plan.ip_provider.reserve(instance_plan.network_plans.first.reservation)
  @vm_creator.create_for_instance_plan(instance_plan, [])
  instance_plan.instance
rescue Exception => e
  raise e
ensure
  add_event(instance_model.deployment.name, instance_model.name, parent_id, e )
end
create_instance_plan(stemcell) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 111
def create_instance_plan(stemcell)
  if @deployment_plan.compilation.vm_type
    vm_type = @deployment_plan.compilation.vm_type
  else
    vm_type = CompilationVmType.new(@deployment_plan.compilation.cloud_properties)
  end

  vm_extensions = @deployment_plan.compilation.vm_extensions

  env = Env.new(@deployment_plan.compilation.env)

  compile_job = CompilationJob.new(vm_type, vm_extensions, stemcell, env, @deployment_plan.compilation.network_name)
  availability_zone = @deployment_plan.compilation.availability_zone
  instance = Instance.create_from_job(compile_job, 0, 'started', @deployment_plan.model, {}, availability_zone, @logger)
  instance.bind_new_instance_model

  compilation_network = @deployment_plan.network(@deployment_plan.compilation.network_name)
  reservation = DesiredNetworkReservation.new_dynamic(instance.model, compilation_network)
  desired_instance = DeploymentPlan::DesiredInstance.new(compile_job, nil)
  instance_plan = DeploymentPlan::InstancePlan.new(
    existing_instance: instance.model,
    instance: instance,
    desired_instance: desired_instance,
    network_plans: [DeploymentPlan::NetworkPlanner::Plan.new(reservation: reservation)]
  )

  compile_job.add_instance_plans([instance_plan])
  instance_plan
end

Private Instance Methods

add_event(deployment_name, instance_name = nil, parent_id = nil, error = nil) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 155
def add_event(deployment_name, instance_name = nil, parent_id = nil, error = nil)
  user  = Config.current_job.username
  event  = Config.current_job.event_manager.create_event(
      {
          parent_id:   parent_id,
          user:        user,
          action:      'create',
          object_type: 'instance',
          object_name: instance_name,
          task:        Config.current_job.task_id,
          deployment:  deployment_name,
          instance:    instance_name,
          error:       error
      })
  event.id
end