class Bosh::Director::Jobs::CloudCheck::ScanAndFix
Attributes
filtered_jobs[R]
Public Class Methods
job_type()
click to toggle source
# File lib/bosh/director/jobs/cloud_check/scan_and_fix.rb, line 14 def self.job_type :cck_scan_and_fix end
new(deployment_name, jobs, fix_stateful_jobs=false)
click to toggle source
# File lib/bosh/director/jobs/cloud_check/scan_and_fix.rb, line 18 def initialize(deployment_name, jobs, fix_stateful_jobs=false) @deployment_manager = Api::DeploymentManager.new @instance_manager = Bosh::Director::Api::InstanceManager.new @deployment = @deployment_manager.find_by_name(deployment_name) @jobs = jobs # [[j1, i1], [j1, i2], [j2, i1], [j2, i2], ...] @fix_stateful_jobs = fix_stateful_jobs end
Public Instance Methods
perform()
click to toggle source
# File lib/bosh/director/jobs/cloud_check/scan_and_fix.rb, line 26 def perform jobs = filtered_jobs resolved_problems = 0 error_message = nil begin with_deployment_lock(@deployment, :timeout => 0) do scanner = ProblemScanner::Scanner.new(@deployment) scanner.reset(jobs) scanner.scan_vms(jobs) resolver = ProblemResolver.new(@deployment) resolved_problems, error_message = resolver.apply_resolutions(resolutions(jobs)) if resolved_problems > 0 PostDeploymentScriptRunner.run_post_deploys_after_resurrection(@deployment) end end if error_message raise Bosh::Director::ProblemHandlerError, error_message end 'scan and fix complete' rescue Lock::TimeoutError raise 'Unable to get deployment lock, maybe a deployment is in progress. Try again later.' end end
resolutions(jobs)
click to toggle source
# File lib/bosh/director/jobs/cloud_check/scan_and_fix.rb, line 57 def resolutions(jobs) all_resolutions = {} jobs.each do |job, index| instance = @instance_manager.find_by_name(@deployment, job, index) next if instance.resurrection_paused || instance.ignore problems = Models::DeploymentProblem.filter(deployment: @deployment, resource_id: instance.id, state: 'open') problems.each do |problem| if problem.type == 'unresponsive_agent' || problem.type == 'missing_vm' all_resolutions[problem.id.to_s] = :recreate_vm end end end all_resolutions end