Class: Bosh::Director::InstanceUpdater::VmUpdater::VmCreator

Inherits:
Object
  • Object
show all
Defined in:
lib/bosh/director/instance_updater/vm_updater.rb

Instance Method Summary collapse

Constructor Details

#initialize(instance, cloud, logger) ⇒ VmCreator

Returns a new instance of VmCreator.



80
81
82
83
84
# File 'lib/bosh/director/instance_updater/vm_updater.rb', line 80

def initialize(instance, cloud, logger)
  @instance = instance
  @cloud = cloud
  @logger = logger
end

Instance Method Details

#create(new_disk_id) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/bosh/director/instance_updater/vm_updater.rb', line 86

def create(new_disk_id)
  @logger.info('Creating VM')
  vm_model = new_vm_model(new_disk_id)

  begin
    @instance.bind_to_vm_model(vm_model)

    agent_client = AgentClient.with_defaults(vm_model.agent_id)
    agent_client.wait_until_ready
    agent_client.update_settings(Bosh::Director::Config.trusted_certs)
    vm_model.update(:trusted_certs_sha1 => Digest::SHA1.hexdigest(Bosh::Director::Config.trusted_certs))
  rescue Exception => e
    @logger.error("Failed to create/contact VM #{vm_model.cid}: #{e.inspect}")
    VmDeleter.new(@instance, vm_model, @cloud, @logger).delete
    raise e
  end

  [vm_model, agent_client]
end

#new_vm_model(new_disk_id) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/bosh/director/instance_updater/vm_updater.rb', line 106

def new_vm_model(new_disk_id)
  deployment = @instance.job.deployment
  resource_pool = @instance.job.resource_pool

  Bosh::Director::VmCreator.create(
    deployment.model,
    resource_pool.stemcell.model,
    resource_pool.cloud_properties,
    @instance.network_settings,
    [@instance.model.persistent_disk_cid, new_disk_id].compact,
    resource_pool.env,
  )
end