Class: Bosh::Director::Jobs::AttachDisk

Inherits:
BaseJob show all
Defined in:
lib/bosh/director/jobs/attach_disk.rb

Instance Attribute Summary

Attributes inherited from BaseJob

#task_id

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseJob

#begin_stage, #dns_manager, #event_log, #logger, perform, #result_file, schedule_message, #single_step_stage, #task_cancelled?, #task_checkpoint, #track_and_log

Constructor Details

#initialize(deployment_name, job_name, instance_id, disk_cid) ⇒ AttachDisk

Returns a new instance of AttachDisk.



15
16
17
18
19
20
21
# File 'lib/bosh/director/jobs/attach_disk.rb', line 15

def initialize(deployment_name, job_name, instance_id, disk_cid)
  @deployment_name = deployment_name
  @job_name = job_name
  @instance_id = instance_id
  @disk_cid = disk_cid
  @transactor = Transactor.new
end

Class Method Details

.enqueue(username, deployment_name, job_name, instance_id, disk_cid, job_queue) ⇒ Object



11
12
13
# File 'lib/bosh/director/jobs/attach_disk.rb', line 11

def self.enqueue(username, deployment_name, job_name, instance_id, disk_cid, job_queue)
  job_queue.enqueue(username, Jobs::AttachDisk, "attach disk '#{disk_cid}' to '#{job_name}/#{instance_id}'", [deployment_name, job_name, instance_id, disk_cid])
end

.job_typeObject



7
8
9
# File 'lib/bosh/director/jobs/attach_disk.rb', line 7

def self.job_type
  :attach_disk
end

Instance Method Details

#performObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/bosh/director/jobs/attach_disk.rb', line 23

def perform
  instance = Models::Instance.filter(job: @job_name, uuid: @instance_id).to_a.first

  if instance.nil? || instance.deployment.name != @deployment_name
    raise AttachDiskErrorUnknownInstance, "Instance '#{@job_name}/#{@instance_id}' in deployment '#{@deployment_name}' was not found"
  end

  if instance.persistent_disk.nil?
    raise AttachDiskNoPersistentDisk, "Job '#{@job_name}' is not configured with a persistent disk"
  end

  if instance.state != 'detached'
    raise AttachDiskInvalidInstanceState, "Instance '#{@job_name}/#{@instance_id}' in deployment '#{@deployment_name}' must be in 'bosh stopped --hard' state"
  end

  @transactor.retryable_transaction(instance.db) do
    instance.persistent_disk.update(active: false)
    Models::PersistentDisk.create(disk_cid: @disk_cid, instance_id: instance.id, active: true, size: 1, cloud_properties: {})
  end

  "attached disk '#{@disk_cid}' to '#{@job_name}/#{@instance_id}' in deployment '#{@deployment_name}'"
end