class Bosh::Director::InstanceDeleter
Coordinates the safe deletion of an instance and all associates resources.
Public Class Methods
new(ip_provider, dns_manager, disk_manager, options={})
click to toggle source
# File lib/bosh/director/instance_deleter.rb, line 5 def initialize(ip_provider, dns_manager, disk_manager, options={}) @ip_provider = ip_provider @dns_manager = dns_manager @disk_manager = disk_manager @cloud = Config.cloud @logger = Config.logger @blobstore = App.instance.blobstores.blobstore @force = options.fetch(:force, false) @virtual_delete_vm = options.fetch(:virtual_delete_vm, false) end
Public Instance Methods
delete_instance_plan(instance_plan, event_log_stage)
click to toggle source
# File lib/bosh/director/instance_deleter.rb, line 17 def delete_instance_plan(instance_plan, event_log_stage) instance_model = instance_plan.new? ? instance_plan.instance.model : instance_plan.existing_instance deployment_name = instance_model.deployment.name instance_name = instance_model.name parent_id = add_event(deployment_name, instance_name) event_log_stage.advance_and_track(instance_model.to_s) do error_ignorer.with_force_check do stop(instance_plan) end vm_deleter.delete_for_instance(instance_model) unless instance_model.compilation error_ignorer.with_force_check do @disk_manager.delete_persistent_disks(instance_model) end error_ignorer.with_force_check do @dns_manager.delete_dns_for_instance(instance_model) end error_ignorer.with_force_check do RenderedJobTemplatesCleaner.new(instance_model, @blobstore, @logger).clean_all end end instance_plan.network_plans.each do |network_plan| reservation = network_plan.reservation @ip_provider.release(reservation) if reservation.reserved? end instance_plan.release_all_network_plans instance_model.destroy end rescue Exception => e raise e ensure add_event(deployment_name, instance_name, parent_id, e) if parent_id end
delete_instance_plans(instance_plans, event_log_stage, options = {})
click to toggle source
# File lib/bosh/director/instance_deleter.rb, line 57 def delete_instance_plans(instance_plans, event_log_stage, options = {}) max_threads = options[:max_threads] || Config.max_threads ThreadPool.new(:max_threads => max_threads).wrap do |pool| instance_plans.each do |instance_plan| pool.process { delete_instance_plan(instance_plan, event_log_stage) } end end end
Private Instance Methods
add_event(deployment_name, instance_name, parent_id = nil, error = nil)
click to toggle source
# File lib/bosh/director/instance_deleter.rb, line 68 def add_event(deployment_name, instance_name, parent_id = nil, error = nil) event = Config.current_job.event_manager.create_event( { parent_id: parent_id, user: Config.current_job.username, action: 'delete', object_type: 'instance', object_name: instance_name, task: Config.current_job.task_id, deployment: deployment_name, instance: instance_name, error: error }) event.id end
error_ignorer()
click to toggle source
FIXME: why do we hate dependency injection?
# File lib/bosh/director/instance_deleter.rb, line 90 def error_ignorer @error_ignorer ||= ErrorIgnorer.new(@force, @logger) end
stop(instance_plan)
click to toggle source
# File lib/bosh/director/instance_deleter.rb, line 84 def stop(instance_plan) stopper = Stopper.new(instance_plan, 'stopped', Config, @logger) stopper.stop end
vm_deleter()
click to toggle source
FIXME: why do we hate dependency injection?
# File lib/bosh/director/instance_deleter.rb, line 95 def vm_deleter @vm_deleter ||= VmDeleter.new(@cloud, @logger, @force, @virtual_delete_vm) end