bosh-director 1.3160.0 → 1.3163.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bosh-director-worker +2 -14
- data/db/migrations/director/20150513225143_ip_addresses.rb +11 -0
- data/db/migrations/director/20150702004608_add_links.rb +8 -0
- data/db/migrations/director/20150708231924_add_link_spec.rb +7 -0
- data/db/migrations/director/20150724183256_add_debugging_to_ip_addresses.rb +8 -0
- data/db/migrations/director/20150730225029_add_uuid_to_instances.rb +16 -0
- data/db/migrations/director/20150803215805_add_availabililty_zone_and_cloud_properties_to_instances.rb +8 -0
- data/db/migrations/director/20150804211419_add_compilation_flag_to_instance.rb +7 -0
- data/db/migrations/director/20150918003455_add_bootstrap_node_to_instance.rb +7 -0
- data/db/migrations/director/20151008232214_add_dns_records.rb +7 -0
- data/db/migrations/director/20151015172551_add_orphan_disks_and_snapshots.rb +29 -0
- data/db/migrations/director/20151030222853_add_templates_to_instance.rb +10 -0
- data/db/migrations/director/20151031001039_add_spec_to_instance.rb +19 -0
- data/db/migrations/director/20151109190602_rename_orphan_columns.rb +13 -0
- data/lib/bosh/director.rb +19 -9
- data/lib/bosh/director/agent_client.rb +0 -17
- data/lib/bosh/director/api/cloud_config_manager.rb +7 -5
- data/lib/bosh/director/api/controllers/base_controller.rb +3 -2
- data/lib/bosh/director/api/controllers/cleanup_controller.rb +15 -0
- data/lib/bosh/director/api/controllers/deployments_controller.rb +38 -26
- data/lib/bosh/director/api/controllers/disks_controller.rb +20 -0
- data/lib/bosh/director/api/controllers/info_controller.rb +2 -2
- data/lib/bosh/director/api/controllers/releases_controller.rb +1 -16
- data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -9
- data/lib/bosh/director/api/deployment_manager.rb +2 -1
- data/lib/bosh/director/api/instance_lookup.rb +17 -0
- data/lib/bosh/director/api/instance_manager.rb +20 -10
- data/lib/bosh/director/api/release_manager.rb +28 -8
- data/lib/bosh/director/api/resurrector_manager.rb +9 -2
- data/lib/bosh/director/api/route_configuration.rb +2 -0
- data/lib/bosh/director/api/snapshot_manager.rb +9 -5
- data/lib/bosh/director/api/stemcell_manager.rb +50 -0
- data/lib/bosh/director/app.rb +1 -1
- data/lib/bosh/director/cloudcheck_helper.rb +119 -132
- data/lib/bosh/director/compile_task.rb +1 -1
- data/lib/bosh/director/compile_task_generator.rb +2 -2
- data/lib/bosh/director/config.rb +21 -12
- data/lib/bosh/director/deployment_deleter.rb +69 -0
- data/lib/bosh/director/deployment_plan.rb +35 -4
- data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +47 -0
- data/lib/bosh/director/deployment_plan/assembler.rb +115 -241
- data/lib/bosh/director/deployment_plan/availability_zone.rb +27 -0
- data/lib/bosh/director/deployment_plan/cloud_manifest_parser.rb +144 -35
- data/lib/bosh/director/deployment_plan/compilation_config.rb +21 -19
- data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +169 -0
- data/lib/bosh/director/deployment_plan/deployment_repo.rb +4 -8
- data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +13 -1
- data/lib/bosh/director/deployment_plan/deployment_validator.rb +17 -0
- data/lib/bosh/director/deployment_plan/desired_instance.rb +15 -0
- data/lib/bosh/director/deployment_plan/{disk_pool.rb → disk_type.rb} +14 -19
- data/lib/bosh/director/deployment_plan/dynamic_network.rb +105 -53
- data/lib/bosh/director/deployment_plan/dynamic_network_subnet.rb +13 -0
- data/lib/bosh/director/deployment_plan/env.rb +18 -0
- data/lib/bosh/director/deployment_plan/global_network_resolver.rb +77 -0
- data/lib/bosh/director/deployment_plan/instance.rb +222 -390
- data/lib/bosh/director/deployment_plan/instance_network_reservations.rb +71 -0
- data/lib/bosh/director/deployment_plan/instance_plan.rb +336 -0
- data/lib/bosh/director/deployment_plan/instance_plan_factory.rb +54 -0
- data/lib/bosh/director/deployment_plan/instance_plan_sorter.rb +61 -0
- data/lib/bosh/director/deployment_plan/instance_planner.rb +101 -0
- data/lib/bosh/director/deployment_plan/instance_repository.rb +36 -0
- data/lib/bosh/director/deployment_plan/instance_spec.rb +154 -0
- data/lib/bosh/director/deployment_plan/ip_provider/database_ip_repo.rb +136 -0
- data/lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb +81 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +153 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider_factory.rb +22 -0
- data/lib/bosh/director/deployment_plan/job.rb +116 -53
- data/lib/bosh/director/deployment_plan/job_availability_zone_parser.rb +49 -0
- data/lib/bosh/director/deployment_plan/job_migrator.rb +90 -0
- data/lib/bosh/director/deployment_plan/job_network.rb +42 -0
- data/lib/bosh/director/deployment_plan/job_network_parser.rb +118 -0
- data/lib/bosh/director/deployment_plan/job_spec_parser.rb +123 -126
- data/lib/bosh/director/deployment_plan/links/link.rb +30 -0
- data/lib/bosh/director/deployment_plan/links/link_lookup.rb +66 -0
- data/lib/bosh/director/deployment_plan/links/link_path.rb +27 -0
- data/lib/bosh/director/deployment_plan/links/links_resolver.rb +70 -0
- data/lib/bosh/director/deployment_plan/links/template_link.rb +21 -0
- data/lib/bosh/director/deployment_plan/manifest_migrator.rb +3 -17
- data/lib/bosh/director/deployment_plan/manifest_validator.rb +46 -0
- data/lib/bosh/director/deployment_plan/manual_network.rb +70 -97
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +148 -0
- data/lib/bosh/director/deployment_plan/network.rb +50 -39
- data/lib/bosh/director/deployment_plan/network_planner.rb +4 -0
- data/lib/bosh/director/deployment_plan/network_planner/plan.rb +26 -0
- data/lib/bosh/director/deployment_plan/network_planner/planner.rb +21 -0
- data/lib/bosh/director/deployment_plan/network_planner/reservation_reconciler.rb +81 -0
- data/lib/bosh/director/deployment_plan/network_planner/vip_static_ips_planner.rb +50 -0
- data/lib/bosh/director/deployment_plan/network_settings.rb +65 -0
- data/lib/bosh/director/deployment_plan/options/skip_drain.rb +7 -0
- data/lib/bosh/director/deployment_plan/package_validator.rb +79 -0
- data/lib/bosh/director/deployment_plan/placement_planner.rb +8 -0
- data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +90 -0
- data/lib/bosh/director/deployment_plan/placement_planner/bruteforce_ip_allocation.rb +124 -0
- data/lib/bosh/director/deployment_plan/placement_planner/index_assigner.rb +32 -0
- data/lib/bosh/director/deployment_plan/placement_planner/networks_to_static_ips.rb +125 -0
- data/lib/bosh/director/deployment_plan/placement_planner/placed_desired_instances.rb +40 -0
- data/lib/bosh/director/deployment_plan/placement_planner/plan.rb +42 -0
- data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +237 -0
- data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +53 -0
- data/lib/bosh/director/deployment_plan/planner.rb +186 -74
- data/lib/bosh/director/deployment_plan/planner_factory.rb +30 -147
- data/lib/bosh/director/deployment_plan/release_version.rb +3 -3
- data/lib/bosh/director/deployment_plan/resource_pool.rb +2 -174
- data/lib/bosh/director/deployment_plan/stemcell.rb +57 -14
- data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +28 -135
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +23 -44
- data/lib/bosh/director/deployment_plan/template.rb +15 -4
- data/lib/bosh/director/deployment_plan/vip_network.rb +14 -42
- data/lib/bosh/director/deployment_plan/vm.rb +1 -99
- data/lib/bosh/director/deployment_plan/vm_type.rb +27 -0
- data/lib/bosh/director/disk_manager.rb +268 -0
- data/lib/bosh/director/dns/canonicalizer.rb +28 -0
- data/lib/bosh/director/dns/dns_manager.rb +163 -0
- data/lib/bosh/director/dns/local_dns_repo.rb +20 -0
- data/lib/bosh/director/dns/powerdns.rb +170 -0
- data/lib/bosh/director/errand/job_manager.rb +18 -29
- data/lib/bosh/director/error_ignorer.rb +16 -0
- data/lib/bosh/director/errors.rb +51 -20
- data/lib/bosh/director/event_log.rb +6 -0
- data/lib/bosh/director/instance_deleter.rb +53 -81
- data/lib/bosh/director/instance_reuser.rb +89 -0
- data/lib/bosh/director/instance_updater.rb +139 -281
- data/lib/bosh/director/instance_updater/preparer.rb +8 -5
- data/lib/bosh/director/instance_updater/state_applier.rb +21 -0
- data/lib/bosh/director/ip_util.rb +46 -26
- data/lib/bosh/director/job_renderer.rb +22 -10
- data/lib/bosh/director/job_runner.rb +1 -4
- data/lib/bosh/director/job_updater.rb +47 -35
- data/lib/bosh/director/job_updater_factory.rb +5 -4
- data/lib/bosh/director/jobs/base_job.rb +8 -0
- data/lib/bosh/director/jobs/cleanup_artifacts.rb +93 -0
- data/lib/bosh/director/jobs/delete_deployment.rb +10 -154
- data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
- data/lib/bosh/director/jobs/delete_orphan_disks.rb +44 -0
- data/lib/bosh/director/jobs/delete_release.rb +19 -196
- data/lib/bosh/director/jobs/delete_stemcell.rb +10 -76
- data/lib/bosh/director/jobs/export_release.rb +41 -121
- data/lib/bosh/director/jobs/fetch_logs.rb +0 -6
- data/lib/bosh/director/jobs/helpers.rb +10 -0
- data/lib/bosh/director/jobs/helpers/blob_deleter.rb +24 -0
- data/lib/bosh/director/jobs/helpers/compiled_package_deleter.rb +24 -0
- data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +48 -0
- data/lib/bosh/director/jobs/helpers/package_deleter.rb +33 -0
- data/lib/bosh/director/jobs/helpers/release_deleter.rb +52 -0
- data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +115 -0
- data/lib/bosh/director/jobs/helpers/releases_to_delete_picker.rb +31 -0
- data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +61 -0
- data/lib/bosh/director/jobs/helpers/stemcells_to_delete_picker.rb +30 -0
- data/lib/bosh/director/jobs/helpers/template_deleter.rb +20 -0
- data/lib/bosh/director/jobs/release/release_job.rb +18 -7
- data/lib/bosh/director/jobs/run_errand.rb +57 -36
- data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +46 -0
- data/lib/bosh/director/jobs/ssh.rb +50 -17
- data/lib/bosh/director/jobs/update_deployment.rb +29 -11
- data/lib/bosh/director/jobs/update_release.rb +25 -4
- data/lib/bosh/director/jobs/vm_state.rb +23 -32
- data/lib/bosh/director/lock.rb +13 -8
- data/lib/bosh/director/logs_fetcher.rb +1 -1
- data/lib/bosh/director/models.rb +3 -0
- data/lib/bosh/director/models/compiled_package.rb +3 -3
- data/lib/bosh/director/models/deployment.rb +10 -0
- data/lib/bosh/director/models/instance.rb +77 -1
- data/lib/bosh/director/models/ip_address.rb +26 -0
- data/lib/bosh/director/models/orphan_disk.rb +23 -0
- data/lib/bosh/director/models/orphan_snapshot.rb +14 -0
- data/lib/bosh/director/models/template.rb +32 -9
- data/lib/bosh/director/models/vm.rb +5 -8
- data/lib/bosh/director/network_reservation.rb +69 -99
- data/lib/bosh/director/problem_handlers/inactive_disk.rb +5 -20
- data/lib/bosh/director/problem_handlers/missing_disk.rb +2 -13
- data/lib/bosh/director/problem_resolver.rb +2 -2
- data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +2 -21
- data/lib/bosh/director/scheduler.rb +23 -6
- data/lib/bosh/director/{instance_updater/stopper.rb → stopper.rb} +24 -18
- data/lib/bosh/director/tagged_logger.rb +30 -0
- data/lib/bosh/director/transactor.rb +9 -0
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_creator.rb +91 -19
- data/lib/bosh/director/vm_deleter.rb +25 -0
- data/lib/bosh/director/vm_recreator.rb +15 -0
- data/lib/cloud/dummy.rb +381 -94
- metadata +110 -30
- data/lib/bosh/director/deployment_plan/dns_binder.rb +0 -45
- data/lib/bosh/director/deployment_plan/instance_vm_binder.rb +0 -37
- data/lib/bosh/director/deployment_plan/network_subnet.rb +0 -166
- data/lib/bosh/director/deployment_plan/resource_pools.rb +0 -68
- data/lib/bosh/director/dns_helper.rb +0 -223
- data/lib/bosh/director/instance_updater/network_updater.rb +0 -110
- data/lib/bosh/director/instance_updater/vm_updater.rb +0 -189
- data/lib/bosh/director/problem_handlers/out_of_sync_vm.rb +0 -64
- data/lib/bosh/director/problem_handlers/unbound_instance_vm.rb +0 -85
- data/lib/bosh/director/resource_pool_updater.rb +0 -174
- data/lib/bosh/director/vm_data.rb +0 -63
- data/lib/bosh/director/vm_reuser.rb +0 -63
@@ -1,7 +1,6 @@
|
|
1
1
|
module Bosh::Director
|
2
2
|
module Jobs
|
3
3
|
class DeleteDeployment < BaseJob
|
4
|
-
include DnsHelper
|
5
4
|
include LockHelper
|
6
5
|
|
7
6
|
@queue = :normal
|
@@ -12,174 +11,31 @@ module Bosh::Director
|
|
12
11
|
|
13
12
|
def initialize(deployment_name, options = {})
|
14
13
|
@deployment_name = deployment_name
|
15
|
-
@force = options[
|
16
|
-
@keep_snapshots = options[
|
14
|
+
@force = options['force']
|
15
|
+
@keep_snapshots = options['keep_snapshots']
|
17
16
|
@cloud = Config.cloud
|
18
17
|
@deployment_manager = Api::DeploymentManager.new
|
19
|
-
@blobstore = App.instance.blobstores.blobstore
|
20
18
|
end
|
21
19
|
|
22
20
|
def perform
|
23
21
|
logger.info("Deleting: #{@deployment_name}")
|
24
22
|
|
25
|
-
deployment = find_deployment(@deployment_name)
|
26
|
-
|
27
|
-
logger.info("Acquiring deployment lock: #{deployment.name}")
|
28
|
-
|
29
23
|
with_deployment_lock(@deployment_name) do
|
30
|
-
|
31
|
-
deployment = find_deployment(@deployment_name)
|
32
|
-
|
33
|
-
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
34
|
-
delete_instances(deployment, pool)
|
35
|
-
pool.wait
|
36
|
-
delete_vms(deployment, pool)
|
37
|
-
end
|
24
|
+
deployment_model = @deployment_manager.find_by_name(@deployment_name)
|
38
25
|
|
39
|
-
|
40
|
-
track_and_log("Detach stemcells") do
|
41
|
-
deployment.remove_all_stemcells
|
42
|
-
end
|
26
|
+
ip_provider = DeploymentPlan::IpProviderFactory.new(true, logger)
|
43
27
|
|
44
|
-
|
45
|
-
|
46
|
-
|
28
|
+
dns_manager = DnsManager.create
|
29
|
+
disk_manager = DiskManager.new(@cloud, logger)
|
30
|
+
instance_deleter = InstanceDeleter.new(ip_provider, dns_manager, disk_manager, force: @force)
|
31
|
+
deployment_deleter = DeploymentDeleter.new(event_log, logger, dns_manager, Config.max_threads)
|
47
32
|
|
48
|
-
|
49
|
-
|
50
|
-
logger.info("Deleting deployment properties")
|
51
|
-
deployment.properties.each do |property|
|
52
|
-
event_log.track(property.name) do
|
53
|
-
property.destroy
|
54
|
-
end
|
55
|
-
end
|
33
|
+
vm_deleter = Bosh::Director::VmDeleter.new(@cloud, logger, force: @force)
|
34
|
+
deployment_deleter.delete(deployment_model, instance_deleter, vm_deleter)
|
56
35
|
|
57
|
-
track_and_log("Delete DNS records") do
|
58
|
-
delete_dns(@deployment_name)
|
59
|
-
end
|
60
|
-
|
61
|
-
track_and_log("Destroy deployment") do
|
62
|
-
deployment.destroy
|
63
|
-
end
|
64
36
|
"/deployments/#{@deployment_name}"
|
65
37
|
end
|
66
38
|
end
|
67
|
-
|
68
|
-
def find_deployment(name)
|
69
|
-
@deployment_manager.find_by_name(name)
|
70
|
-
end
|
71
|
-
|
72
|
-
def delete_instances(deployment, pool)
|
73
|
-
instances = deployment.job_instances
|
74
|
-
event_log.begin_stage("Deleting instances", instances.count)
|
75
|
-
|
76
|
-
instances.each do |instance|
|
77
|
-
pool.process do
|
78
|
-
desc = "#{instance.job}/#{instance.index}"
|
79
|
-
event_log.track(desc) do
|
80
|
-
logger.info("Deleting #{desc}")
|
81
|
-
delete_instance(instance)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def delete_vms(deployment, pool)
|
88
|
-
vms = deployment.vms
|
89
|
-
event_log.begin_stage("Deleting idle VMs", vms.count)
|
90
|
-
|
91
|
-
vms.each do |vm|
|
92
|
-
pool.process do
|
93
|
-
event_log.track("#{vm.cid}") do
|
94
|
-
logger.info("Deleting idle vm #{vm.cid}")
|
95
|
-
delete_vm(vm)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def delete_instance(instance)
|
102
|
-
desc = "#{instance.job}/#{instance.index}"
|
103
|
-
with_thread_name("delete_instance(#{desc})") do
|
104
|
-
logger.info("Deleting instance: #{desc}")
|
105
|
-
|
106
|
-
vm = instance.vm
|
107
|
-
|
108
|
-
if vm && vm.agent_id
|
109
|
-
ignoring_errors_when_forced do
|
110
|
-
agent = AgentClient.with_defaults(vm.agent_id)
|
111
|
-
agent.stop
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
instance.persistent_disks.each do |disk|
|
116
|
-
if disk.active && vm && vm.cid && disk.disk_cid
|
117
|
-
if vm.agent_id
|
118
|
-
ignoring_errors_when_forced do
|
119
|
-
agent = AgentClient.with_defaults(vm.agent_id)
|
120
|
-
agent.unmount_disk(disk.disk_cid)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
ignoring_errors_when_forced do
|
125
|
-
# If persistent disk has been mounted but
|
126
|
-
# clean_shutdown above did not unmount it
|
127
|
-
# properly (i.e. for wedged deployment),
|
128
|
-
# detach_disk might hang indefinitely.
|
129
|
-
# Right now it's up to cloudcheck handle
|
130
|
-
# that but 'force' might be added to CPI
|
131
|
-
# in the future.
|
132
|
-
@cloud.detach_disk(vm.cid, disk.disk_cid)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
if disk.disk_cid
|
137
|
-
ignoring_errors_when_forced do
|
138
|
-
delete_snapshots(disk)
|
139
|
-
@cloud.delete_disk(disk.disk_cid)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
disk.destroy
|
144
|
-
end
|
145
|
-
|
146
|
-
ignoring_errors_when_forced do
|
147
|
-
RenderedJobTemplatesCleaner.new(instance, @blobstore, @logger).clean_all
|
148
|
-
end
|
149
|
-
|
150
|
-
instance.destroy
|
151
|
-
|
152
|
-
delete_vm(vm) if vm
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
def delete_snapshots(disk)
|
157
|
-
@keep_snapshots ? disk.snapshots.each(&:delete) : Api::SnapshotManager.delete_snapshots(disk.snapshots)
|
158
|
-
end
|
159
|
-
|
160
|
-
def delete_vm(vm)
|
161
|
-
if vm.cid
|
162
|
-
ignoring_errors_when_forced do
|
163
|
-
@cloud.delete_vm(vm.cid)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
vm.destroy
|
167
|
-
end
|
168
|
-
|
169
|
-
def delete_dns(name)
|
170
|
-
if Config.dns_enabled?
|
171
|
-
record_pattern = ["%", canonical(name), dns_domain_name].join(".")
|
172
|
-
delete_dns_records(record_pattern)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def ignoring_errors_when_forced
|
177
|
-
yield
|
178
|
-
rescue => e
|
179
|
-
raise unless @force
|
180
|
-
logger.warn(e.backtrace.join("\n"))
|
181
|
-
logger.info("Force deleting is set, ignoring exception")
|
182
|
-
end
|
183
39
|
end
|
184
40
|
end
|
185
41
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Bosh::Director
|
2
|
+
module Jobs
|
3
|
+
class DeleteOrphanDisks < BaseJob
|
4
|
+
|
5
|
+
@queue = :normal
|
6
|
+
|
7
|
+
def self.job_type
|
8
|
+
:delete_orphan_disks
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.enqueue(username, orphan_disk_cids, job_queue)
|
12
|
+
persistent_disk_cids = orphan_disk_cids.select do |disk_cid|
|
13
|
+
Bosh::Director::Models::PersistentDisk.where(disk_cid: disk_cid).any?
|
14
|
+
end
|
15
|
+
if persistent_disk_cids.any?
|
16
|
+
raise DeletingPersistentDiskError, "Deleting persistent disk is not supported: #{persistent_disk_cids}"
|
17
|
+
end
|
18
|
+
|
19
|
+
job_queue.enqueue(username, Jobs::DeleteOrphanDisks, 'delete orphan disks', [orphan_disk_cids])
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(orphan_disk_cids)
|
23
|
+
@orphan_disk_cids = orphan_disk_cids
|
24
|
+
@disk_manager = Bosh::Director::DiskManager.new(Config.cloud, Config.logger)
|
25
|
+
end
|
26
|
+
|
27
|
+
def perform
|
28
|
+
event_log.begin_stage('Deleting orphaned disks', @orphan_disk_cids.count)
|
29
|
+
|
30
|
+
ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
|
31
|
+
@orphan_disk_cids.each do |orphan_disk_cid|
|
32
|
+
pool.process do
|
33
|
+
event_log.track("Deleting orphaned disk #{orphan_disk_cid}") do
|
34
|
+
@disk_manager.delete_orphan_disk_by_disk_cid(orphan_disk_cid)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
"orphaned disk(s) #{@orphan_disk_cids.join(', ')} deleted"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Director
|
4
2
|
module Jobs
|
5
3
|
class DeleteRelease < BaseJob
|
@@ -13,212 +11,37 @@ module Bosh::Director
|
|
13
11
|
|
14
12
|
def initialize(name, options = {})
|
15
13
|
@name = name
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@force = !!options["force"]
|
19
|
-
@version = options["version"]
|
20
|
-
@release_manager = Api::ReleaseManager.new
|
21
|
-
end
|
22
|
-
|
23
|
-
def delete_release_version(release_version)
|
24
|
-
release = release_version.release
|
25
|
-
|
26
|
-
packages_to_keep = []
|
27
|
-
packages_to_delete = []
|
28
|
-
templates_to_keep = []
|
29
|
-
templates_to_delete = []
|
30
|
-
|
31
|
-
# We don't delete packages inside this loop b/c Sequel will also delete
|
32
|
-
# them from packages collection we're iterating on which will lead to
|
33
|
-
# skipping some packages
|
34
|
-
release_version.packages.each do |package|
|
35
|
-
if package.release_versions == [ release_version ]
|
36
|
-
packages_to_delete << package
|
37
|
-
else
|
38
|
-
packages_to_keep << package
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
release_version.templates.each do |template|
|
43
|
-
if template.release_versions == [ release_version ]
|
44
|
-
templates_to_delete << template
|
45
|
-
else
|
46
|
-
templates_to_keep << template
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
event_log.begin_stage("Deleting packages", packages_to_delete.count)
|
51
|
-
packages_to_delete.each do |package|
|
52
|
-
track_and_log("#{package.name}/#{package.version}") do
|
53
|
-
logger.info("Package #{package.name}/#{package.version} " +
|
54
|
-
"is only used by this release version " +
|
55
|
-
"and will be deleted")
|
56
|
-
delete_package(package)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
packages_to_keep.each do |package|
|
61
|
-
logger.info("Keeping package #{package.name}/#{package.version} " +
|
62
|
-
"as it is used by other release versions")
|
63
|
-
package.remove_release_version(release_version)
|
64
|
-
end
|
65
|
-
|
66
|
-
event_log.begin_stage("Deleting jobs", templates_to_delete.count)
|
67
|
-
templates_to_delete.each do |template|
|
68
|
-
track_and_log("#{template.name}/#{template.version}") do
|
69
|
-
logger.info("Template #{template.name}/#{template.version} " +
|
70
|
-
"is only used by this release version " +
|
71
|
-
"and will be deleted")
|
72
|
-
delete_template(template)
|
73
|
-
end
|
74
|
-
end
|
14
|
+
@force = !!options['force']
|
15
|
+
@version = options['version']
|
75
16
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
if @errors.empty? || @force
|
87
|
-
release_version.destroy
|
88
|
-
end
|
89
|
-
|
90
|
-
if release.versions.empty?
|
91
|
-
delete_release(release)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def delete_release(release)
|
96
|
-
event_log.begin_stage("Deleting packages", release.packages.count)
|
97
|
-
release.packages.each do |package|
|
98
|
-
track_and_log("#{package.name}/#{package.version}") do
|
99
|
-
delete_package(package)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
event_log.begin_stage("Deleting jobs", release.templates.count)
|
104
|
-
release.templates.each do |template|
|
105
|
-
track_and_log("#{template.name}/#{template.version}") do
|
106
|
-
delete_template(template)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
if @errors.empty? || @force
|
111
|
-
event_log.begin_stage("Deleting release versions",
|
112
|
-
release.versions.count)
|
113
|
-
|
114
|
-
release.versions.each do |release_version|
|
115
|
-
track_and_log("#{release.name}/#{release_version.version}") do
|
116
|
-
release_version.destroy
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
release.destroy
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def delete_package(package)
|
125
|
-
compiled_packages = package.compiled_packages
|
126
|
-
|
127
|
-
logger.info("Deleting package #{package.name}/#{package.version}")
|
128
|
-
|
129
|
-
compiled_packages.each do |compiled_package|
|
130
|
-
stemcell = compiled_package.stemcell
|
131
|
-
logger.info("Deleting compiled package " +
|
132
|
-
"(#{compiled_package.blobstore_id}) " +
|
133
|
-
"#{package.name}/#{package.version} " +
|
134
|
-
"for #{stemcell.name}/#{stemcell.version}")
|
135
|
-
|
136
|
-
if delete_blobstore_id(compiled_package.blobstore_id)
|
137
|
-
compiled_package.destroy
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
if delete_blobstore_id(package.blobstore_id, true)
|
142
|
-
package.remove_all_release_versions
|
143
|
-
package.destroy
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def delete_template(template)
|
148
|
-
logger.info("Deleting job: #{template.name}/#{template.version}")
|
149
|
-
|
150
|
-
if delete_blobstore_id(template.blobstore_id)
|
151
|
-
template.remove_all_release_versions
|
152
|
-
template.destroy
|
153
|
-
end
|
17
|
+
blobstore = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
|
18
|
+
blob_deleter = Helpers::BlobDeleter.new(blobstore, logger)
|
19
|
+
compiled_package_deleter = Helpers::CompiledPackageDeleter.new(blob_deleter, logger)
|
20
|
+
package_deleter = Helpers::PackageDeleter.new(compiled_package_deleter, blob_deleter, logger)
|
21
|
+
template_deleter = Helpers::TemplateDeleter.new(blob_deleter, logger)
|
22
|
+
release_deleter = Helpers::ReleaseDeleter.new(package_deleter, template_deleter, event_log, logger)
|
23
|
+
release_version_deleter =
|
24
|
+
Helpers::ReleaseVersionDeleter.new(release_deleter, package_deleter, template_deleter, logger, event_log)
|
25
|
+
release_manager = Api::ReleaseManager.new
|
26
|
+
@name_version_release_deleter = Helpers::NameVersionReleaseDeleter.new(release_deleter, release_manager, release_version_deleter, logger)
|
154
27
|
end
|
155
28
|
|
156
29
|
def perform
|
157
|
-
logger.info(
|
30
|
+
logger.info('Processing delete release')
|
158
31
|
|
159
|
-
|
160
|
-
logger.info("Looking up release: #{@name}")
|
161
|
-
release = @release_manager.find_by_name(@name)
|
162
|
-
logger.info("Found release: #{release.name}")
|
32
|
+
errors = nil
|
163
33
|
|
164
|
-
|
165
|
-
|
166
|
-
release_version = @release_manager.find_version(release, @version)
|
167
|
-
# found version may be different than the requested version, due to version formatting
|
168
|
-
logger.info("Found release version: `#{release.name}/#{release_version.version}'")
|
169
|
-
logger.info("Checking for any deployments still using " +
|
170
|
-
"this particular release version")
|
171
|
-
|
172
|
-
deployments = release_version.deployments
|
173
|
-
|
174
|
-
unless deployments.empty?
|
175
|
-
names = deployments.map{ |d| d.name }.join(", ")
|
176
|
-
raise ReleaseVersionInUse,
|
177
|
-
"ReleaseVersion `#{release.name}/#{release_version.version}' is still in use by: #{names}"
|
178
|
-
end
|
179
|
-
|
180
|
-
delete_release_version(release_version)
|
181
|
-
else
|
182
|
-
logger.info("Checking for any deployments still using the release")
|
183
|
-
deployments = release.versions.map { |version|
|
184
|
-
version.deployments
|
185
|
-
}.flatten.uniq
|
186
|
-
|
187
|
-
unless deployments.empty?
|
188
|
-
names = deployments.map { |d| d.name }.join(", ")
|
189
|
-
raise ReleaseInUse,
|
190
|
-
"Release `#{release.name}' is still in use by: #{names}"
|
191
|
-
end
|
192
|
-
|
193
|
-
delete_release(release)
|
194
|
-
end
|
34
|
+
with_release_lock(@name, :timeout => 10) do
|
35
|
+
errors = @name_version_release_deleter.find_and_delete_release(@name, @version, @force)
|
195
36
|
end
|
196
37
|
|
197
|
-
unless
|
198
|
-
|
199
|
-
raise ReleaseDeleteFailed, "Can't delete release: #{
|
38
|
+
unless errors.empty?
|
39
|
+
error_strings = errors.map { |e| e.to_s }.join(', ')
|
40
|
+
raise ReleaseDeleteFailed, "Can't delete release: #{error_strings}"
|
200
41
|
end
|
201
42
|
|
202
43
|
"/release/#{@name}"
|
203
44
|
end
|
204
|
-
|
205
|
-
def delete_blobstore_id(blobstore_id, nil_id_allowed = false)
|
206
|
-
if blobstore_id.nil? && nil_id_allowed
|
207
|
-
return true
|
208
|
-
end
|
209
|
-
|
210
|
-
deleted = false
|
211
|
-
begin
|
212
|
-
@blobstore.delete(blobstore_id)
|
213
|
-
deleted = true
|
214
|
-
rescue Exception => e
|
215
|
-
logger.warn("Could not delete from blobstore: #{e}\n " + e.backtrace.join("\n"))
|
216
|
-
@errors << e
|
217
|
-
end
|
218
|
-
|
219
|
-
return deleted || @force
|
220
|
-
end
|
221
|
-
|
222
45
|
end
|
223
46
|
end
|
224
47
|
end
|