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
|
7
8
9
|
# File 'lib/bosh/director/jobs/attach_disk.rb', line 7
def self.job_type
:attach_disk
end
|
Instance Method Details
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
|