class Bosh::Director::ProblemHandlers::MissingDisk
Public Class Methods
new(disk_id, data)
click to toggle source
Calls superclass method
Bosh::Director::ProblemHandlers::Base::new
# File lib/bosh/director/problem_handlers/missing_disk.rb, line 8 def initialize(disk_id, data) super @disk_id = disk_id @data = data @disk = Models::PersistentDisk[@disk_id] if @disk.nil? handler_error("Disk '#{@disk_id}' is no longer in the database") end @instance = @disk.instance if @instance.nil? handler_error("Cannot find instance for disk '#{@disk.disk_cid}'") end end
Public Instance Methods
delete_disk_reference()
click to toggle source
# File lib/bosh/director/problem_handlers/missing_disk.rb, line 41 def delete_disk_reference @disk.update(active: false) # If VM is present we try to unmount and detach disk from VM if @instance.vm_cid && cloud.has_vm?(@instance.vm_cid) agent_client = agent_client(@instance.credentials, @instance.agent_id) disk_list = [] begin disk_list = agent_client.list_disk if disk_list.include?(@disk.disk_cid) @logger.debug('Trying to unmount disk') agent_client.unmount_disk(@disk.disk_cid) end rescue Bosh::Director::RpcTimeout # When agent is not responding it probably is failing to # access missing disk. We continue with sending detach_disk # which should update agent settings.json and it should be # restarted successfully. @logger.debug('Agent is not responding, skipping unmount') rescue Bosh::Director::RpcRemoteException => e handler_error("Cannot unmount disk, #{e.message}") end begin @logger.debug('Sending cpi request: detach_disk') cloud.detach_disk(@instance.vm_cid, @disk.disk_cid) if @instance.vm_cid rescue Bosh::Clouds::DiskNotAttached, Bosh::Clouds::DiskNotFound end end DiskManager.new(cloud, @logger).orphan_disk(@disk) end
description()
click to toggle source
# File lib/bosh/director/problem_handlers/missing_disk.rb, line 24 def description job = @instance.job || "unknown job" uuid = @instance.uuid || "unknown id" disk_label = "'#{@disk.disk_cid}' (#{job}/#{uuid}, #{@disk.size.to_i}M)" "Disk #{disk_label} is missing" end