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,101 +1,35 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
1
|
module Bosh::Director
|
4
2
|
module Jobs
|
5
3
|
class DeleteStemcell < BaseJob
|
6
|
-
include LockHelper
|
7
|
-
|
8
4
|
@queue = :normal
|
9
5
|
|
10
6
|
def self.job_type
|
11
7
|
:delete_stemcell
|
12
8
|
end
|
13
9
|
|
14
|
-
# @param [String] name Stemcell name
|
15
|
-
# @param [String] version Stemcell version
|
16
10
|
def initialize(name, version, options = {})
|
17
11
|
@name = name
|
18
12
|
@version = version
|
19
13
|
@options = options
|
20
14
|
@cloud = Config.cloud
|
21
|
-
@blobstore = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
|
22
15
|
@stemcell_manager = Api::StemcellManager.new
|
16
|
+
|
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
|
+
@stemcell_deleter = Helpers::StemcellDeleter.new(@cloud, compiled_package_deleter, logger, event_log)
|
23
21
|
end
|
24
22
|
|
25
23
|
def perform
|
26
24
|
logger.info("Processing delete stemcell")
|
27
|
-
with_stemcell_lock(@name, @version) do
|
28
|
-
logger.info("Looking up stemcell: #{desc}")
|
29
|
-
@stemcell = @stemcell_manager.find_by_name_and_version(@name, @version)
|
30
|
-
logger.info("Found: #{@stemcell.pretty_inspect}")
|
31
|
-
|
32
|
-
validate_deletion
|
33
|
-
delete_from_cloud
|
34
|
-
cleanup_compiled_packages
|
35
|
-
delete_stemcell_metadata
|
36
|
-
end
|
37
|
-
|
38
|
-
"/stemcells/#{@name}/#{@version}"
|
39
|
-
end
|
40
|
-
|
41
|
-
def validate_deletion
|
42
|
-
logger.info("Checking for any deployments still using the stemcell")
|
43
|
-
deployments = @stemcell.deployments
|
44
|
-
unless deployments.empty?
|
45
|
-
names = deployments.map { |d| d.name }.join(", ")
|
46
|
-
raise StemcellInUse,
|
47
|
-
"Stemcell `#{desc}' is still in use by: #{names}"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def delete_from_cloud
|
52
|
-
event_log.begin_stage("Deleting stemcell from cloud", 1)
|
53
25
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
rescue => e
|
58
|
-
raise unless force?
|
59
|
-
logger.warn(e.backtrace.join("\n"))
|
60
|
-
logger.info("Force deleting is set, ignoring exception: #{e.message}")
|
61
|
-
end
|
62
|
-
|
63
|
-
def cleanup_compiled_packages
|
64
|
-
logger.info("Looking for any compiled packages on this stemcell")
|
65
|
-
compiled_packages =
|
66
|
-
Models::CompiledPackage.filter(:stemcell_id => @stemcell.id)
|
67
|
-
|
68
|
-
event_log.begin_stage("Deleting compiled packages",
|
69
|
-
compiled_packages.count, [@name, @version])
|
70
|
-
logger.info("Deleting compiled packages " +
|
71
|
-
"(#{compiled_packages.count}) for `#{desc}'")
|
72
|
-
|
73
|
-
compiled_packages.each do |compiled_package|
|
74
|
-
next unless compiled_package
|
75
|
-
|
76
|
-
package = compiled_package.package
|
77
|
-
track_and_log("#{package.name}/#{package.version}") do
|
78
|
-
logger.info("Deleting compiled package: " +
|
79
|
-
"#{package.name}/#{package.version}")
|
80
|
-
@blobstore.delete(compiled_package.blobstore_id)
|
81
|
-
compiled_package.destroy
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
26
|
+
logger.info("Looking up stemcell: #{@name}/#{@version}")
|
27
|
+
stemcell = @stemcell_manager.find_by_name_and_version(@name, @version)
|
28
|
+
logger.info("Found: #{stemcell.pretty_inspect}")
|
85
29
|
|
86
|
-
|
87
|
-
event_log.begin_stage("Deleting stemcell metadata", 1)
|
88
|
-
event_log.track("Deleting stemcell metadata") do
|
89
|
-
@stemcell.destroy
|
90
|
-
end
|
91
|
-
end
|
30
|
+
@stemcell_deleter.delete(stemcell, @options)
|
92
31
|
|
93
|
-
|
94
|
-
"#@name/#@version"
|
95
|
-
end
|
96
|
-
|
97
|
-
def force?
|
98
|
-
@options["force"]
|
32
|
+
"/stemcells/#{@name}/#{@version}"
|
99
33
|
end
|
100
34
|
end
|
101
35
|
end
|
@@ -27,44 +27,44 @@ module Bosh::Director
|
|
27
27
|
def perform
|
28
28
|
logger.info("Exporting release: #{@release_name}/#{@release_version} for #{@stemcell_os}/#{@stemcell_version}")
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
deployment_plan_stemcell = Bosh::Director::DeploymentPlan::Stemcell.new({
|
31
|
+
"os" => @stemcell_os,
|
32
|
+
"version" => @stemcell_version
|
33
|
+
})
|
34
34
|
|
35
35
|
deployment_manager = Bosh::Director::Api::DeploymentManager.new
|
36
|
-
|
37
|
-
@deployment_manifest = Psych.load(@targeted_deployment.manifest)
|
36
|
+
targeted_deployment = deployment_manager.find_by_name(@deployment_name)
|
38
37
|
|
39
38
|
release_manager = Bosh::Director::Api::ReleaseManager.new
|
40
39
|
release = release_manager.find_by_name(@release_name)
|
41
|
-
|
40
|
+
release_version_model = release_manager.find_version(release, @release_version)
|
42
41
|
|
43
|
-
unless deployment_manifest_has_release?
|
42
|
+
unless deployment_manifest_has_release?(targeted_deployment.manifest)
|
44
43
|
raise ReleaseNotMatchingManifest, "Release version `#{@release_name}/#{@release_version}' not found in deployment `#{@deployment_name}' manifest"
|
45
44
|
end
|
46
45
|
|
47
|
-
|
46
|
+
planner_factory = DeploymentPlan::PlannerFactory.create(logger)
|
47
|
+
planner = planner_factory.create_from_model(targeted_deployment)
|
48
|
+
deployment_plan_stemcell.bind_model(planner)
|
49
|
+
|
50
|
+
stemcell_model = deployment_plan_stemcell.model
|
51
|
+
logger.info "Will compile with stemcell: #{stemcell_model.desc}"
|
52
|
+
|
53
|
+
release = planner.release(@release_name)
|
54
|
+
|
55
|
+
export_release_job = create_job_with_all_the_templates_so_everything_compiles(release_version_model, release, planner, deployment_plan_stemcell)
|
56
|
+
planner.add_job(export_release_job)
|
57
|
+
planner.bind_models
|
48
58
|
|
49
59
|
lock_timeout = 15 * 60 # 15 minutes
|
50
60
|
|
51
61
|
with_deployment_lock(@deployment_name, :timeout => lock_timeout) do
|
52
62
|
with_release_lock(@release_name, :timeout => lock_timeout) do
|
53
|
-
with_stemcell_lock(
|
54
|
-
|
55
|
-
planner = create_planner(stemcell_manager)
|
56
|
-
package_compile_step = DeploymentPlan::Steps::PackageCompileStep.new(
|
57
|
-
planner,
|
58
|
-
Config.cloud, # CPI
|
59
|
-
Config.logger,
|
60
|
-
Config.event_log,
|
61
|
-
self
|
62
|
-
)
|
63
|
-
package_compile_step.perform
|
64
|
-
|
65
|
-
tarball_state = create_tarball
|
66
|
-
result_file.write(tarball_state.to_json + "\n")
|
63
|
+
with_stemcell_lock(stemcell_model.name, stemcell_model.version, :timeout => lock_timeout) do
|
64
|
+
planner.compile_packages
|
67
65
|
|
66
|
+
tarball_state = create_tarball(release_version_model, stemcell_model)
|
67
|
+
result_file.write(tarball_state.to_json + "\n")
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
@@ -73,71 +73,26 @@ module Bosh::Director
|
|
73
73
|
|
74
74
|
private
|
75
75
|
|
76
|
-
def deployment_manifest_has_release?
|
77
|
-
|
78
|
-
|
76
|
+
def deployment_manifest_has_release?(manifest)
|
77
|
+
deployment_manifest = Psych.load(manifest)
|
78
|
+
deployment_manifest['releases'].each do |release|
|
79
|
+
if (release['name'] == @release_name) && (release['version'].to_s == @release_version.to_s)
|
79
80
|
return true
|
80
81
|
end
|
81
82
|
end
|
82
83
|
false
|
83
84
|
end
|
84
85
|
|
85
|
-
def
|
86
|
-
cloud_config_model = @targeted_deployment.cloud_config
|
87
|
-
|
88
|
-
planner_factory = DeploymentPlan::PlannerFactory.create(Config.event_log, Config.logger)
|
89
|
-
planner = planner_factory.planner_without_vm_binding(
|
90
|
-
@deployment_manifest,
|
91
|
-
cloud_config_model,
|
92
|
-
{}
|
93
|
-
)
|
94
|
-
network_name = planner.networks.first.name
|
95
|
-
|
96
|
-
fake_resource_pool_manifest = {
|
97
|
-
"name" => "just_for_compiling",
|
98
|
-
"network" => network_name,
|
99
|
-
"stemcell" => { "name" => @stemcell.name, "version" => @stemcell.version }
|
100
|
-
}
|
101
|
-
|
102
|
-
resource_pool = DeploymentPlan::ResourcePool.new(planner, fake_resource_pool_manifest, Config.logger)
|
103
|
-
planner.add_resource_pool(resource_pool)
|
104
|
-
planner.reset_jobs
|
105
|
-
|
106
|
-
fake_job = create_fake_job(planner, fake_resource_pool_manifest, network_name)
|
107
|
-
planner.add_job(fake_job)
|
108
|
-
|
109
|
-
assembler = DeploymentPlan::Assembler.new(
|
110
|
-
planner,
|
111
|
-
stemcell_manager,
|
112
|
-
Config.cloud,
|
113
|
-
nil, # blobstore not used for this assembler purposes
|
114
|
-
@logger,
|
115
|
-
@event_log
|
116
|
-
)
|
117
|
-
@logger.info('Created deployment plan')
|
118
|
-
|
119
|
-
track_and_log('Binding existing deployment') do
|
120
|
-
assembler.bind_existing_deployment
|
121
|
-
end
|
122
|
-
|
123
|
-
track_and_log('Binding resource pools') do
|
124
|
-
assembler.bind_resource_pools
|
125
|
-
end
|
126
|
-
|
127
|
-
planner
|
128
|
-
end
|
129
|
-
|
130
|
-
def create_tarball
|
131
|
-
|
86
|
+
def create_tarball(release_version_model, stemcell_model)
|
132
87
|
blobstore_client = Bosh::Director::App.instance.blobstores.blobstore
|
133
88
|
|
134
|
-
compiled_packages_group = CompiledPackageGroup.new(
|
135
|
-
templates =
|
89
|
+
compiled_packages_group = CompiledPackageGroup.new(release_version_model, stemcell_model)
|
90
|
+
templates = release_version_model.templates.map
|
136
91
|
|
137
92
|
compiled_release_downloader = CompiledReleaseDownloader.new(compiled_packages_group, templates, blobstore_client)
|
138
93
|
download_dir = compiled_release_downloader.download
|
139
94
|
|
140
|
-
manifest = CompiledReleaseManifest.new(compiled_packages_group, templates,
|
95
|
+
manifest = CompiledReleaseManifest.new(compiled_packages_group, templates, stemcell_model)
|
141
96
|
manifest.write(File.join(download_dir, 'release.MF'))
|
142
97
|
|
143
98
|
output_path = File.join(download_dir, "compiled_release_#{Time.now.to_f}.tar.gz")
|
@@ -149,60 +104,25 @@ module Bosh::Director
|
|
149
104
|
oid = blobstore_client.create(tarball_file)
|
150
105
|
|
151
106
|
{
|
152
|
-
|
153
|
-
|
107
|
+
:blobstore_id => oid,
|
108
|
+
:sha1 => Digest::SHA1.file(output_path).hexdigest,
|
154
109
|
}
|
155
110
|
ensure
|
156
111
|
compiled_release_downloader.cleanup unless compiled_release_downloader.nil?
|
157
112
|
end
|
158
113
|
|
159
|
-
def
|
160
|
-
|
161
|
-
"name" => "dummy-job-for-compilation",
|
162
|
-
"release" => @release_name,
|
163
|
-
"instances" => 1,
|
164
|
-
"resource_pool" => fake_resource_pool_manifest['name'],
|
165
|
-
"templates" => @release_version_model.templates.map do |template|
|
166
|
-
{ "name" => template.name, "release" => @release_name }
|
167
|
-
end,
|
168
|
-
"networks" => [ "name" => network_name ],
|
169
|
-
}
|
114
|
+
def create_job_with_all_the_templates_so_everything_compiles(release_version_model, release, planner, deployment_plan_stemcell)
|
115
|
+
job = DeploymentPlan::Job.new(logger)
|
170
116
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
fake_job
|
177
|
-
end
|
178
|
-
|
179
|
-
def validate_release_packages
|
180
|
-
faults = Set.new
|
181
|
-
@release_version_model.packages.each do |package|
|
182
|
-
packages_list = @release_version_model.transitive_dependencies(package)
|
183
|
-
packages_list << package
|
184
|
-
|
185
|
-
packages_list.each { |needed_package|
|
186
|
-
if needed_package.sha1.nil? || needed_package.blobstore_id.nil?
|
187
|
-
compiled_packages_list = Bosh::Director::Models::CompiledPackage[:package_id => needed_package.id, :stemcell_id => @stemcell.id]
|
188
|
-
if compiled_packages_list.nil?
|
189
|
-
faults << needed_package
|
190
|
-
end
|
191
|
-
end
|
192
|
-
}
|
117
|
+
job.name = 'dummy-job-for-compilation'
|
118
|
+
job.stemcell = deployment_plan_stemcell
|
119
|
+
job.all_properties = planner.properties
|
120
|
+
release_version_model.templates.map do |template|
|
121
|
+
job.templates << release.get_or_create_template(template.name)
|
193
122
|
end
|
194
123
|
|
195
|
-
|
196
|
-
sorted_faults = faults.to_a.sort_by { |p| p.name }
|
197
|
-
msg = "Can't export release `#{@release_name}/#{@release_version}'. It references packages without" +
|
198
|
-
" source code that are not compiled against `#{@stemcell.desc}':\n"
|
199
|
-
sorted_faults.each do |non_compiled_package|
|
200
|
-
msg += " - #{non_compiled_package.name}/#{non_compiled_package.version}\n"
|
201
|
-
end
|
202
|
-
raise PackageMissingSourceCode, msg
|
203
|
-
end
|
124
|
+
job
|
204
125
|
end
|
205
|
-
|
206
126
|
end
|
207
127
|
end
|
208
128
|
end
|
@@ -22,14 +22,8 @@ module Bosh::Director
|
|
22
22
|
|
23
23
|
def perform
|
24
24
|
instance = @instance_manager.find_instance(@instance_id)
|
25
|
-
desc = "#{instance.job}/#{instance.index}"
|
26
25
|
|
27
26
|
deployment = instance.deployment
|
28
|
-
if deployment.nil?
|
29
|
-
raise InstanceDeploymentMissing,
|
30
|
-
"`#{desc}' doesn't belong to any deployment"
|
31
|
-
end
|
32
|
-
|
33
27
|
with_deployment_lock(deployment) do
|
34
28
|
@logs_fetcher.fetch(instance, @log_type, @filters)
|
35
29
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'bosh/director/jobs/helpers/releases_to_delete_picker'
|
2
|
+
require 'bosh/director/jobs/helpers/stemcells_to_delete_picker'
|
3
|
+
require 'bosh/director/jobs/helpers/stemcell_deleter'
|
4
|
+
require 'bosh/director/jobs/helpers/compiled_package_deleter'
|
5
|
+
require 'bosh/director/jobs/helpers/package_deleter'
|
6
|
+
require 'bosh/director/jobs/helpers/blob_deleter'
|
7
|
+
require 'bosh/director/jobs/helpers/template_deleter'
|
8
|
+
require 'bosh/director/jobs/helpers/release_version_deleter'
|
9
|
+
require 'bosh/director/jobs/helpers/release_deleter'
|
10
|
+
require 'bosh/director/jobs/helpers/name_version_release_deleter'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Bosh::Director::Jobs
|
2
|
+
module Helpers
|
3
|
+
class BlobDeleter
|
4
|
+
|
5
|
+
def initialize(blobstore, logger)
|
6
|
+
@blobstore = blobstore
|
7
|
+
@logger = logger
|
8
|
+
end
|
9
|
+
|
10
|
+
def delete(blobstore_id, errors, force)
|
11
|
+
begin
|
12
|
+
@blobstore.delete(blobstore_id)
|
13
|
+
return true
|
14
|
+
rescue Exception => e
|
15
|
+
@logger.warn("Could not delete blob with id `#{blobstore_id}`from blobstore: #{e}\n " + e.backtrace.join("\n"))
|
16
|
+
errors << e
|
17
|
+
end
|
18
|
+
|
19
|
+
force
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Bosh::Director::Jobs
|
2
|
+
module Helpers
|
3
|
+
class CompiledPackageDeleter
|
4
|
+
def initialize(blob_deleter, logger)
|
5
|
+
@blob_deleter = blob_deleter
|
6
|
+
@logger = logger
|
7
|
+
end
|
8
|
+
|
9
|
+
def delete(compiled_package, options = {})
|
10
|
+
package = compiled_package.package
|
11
|
+
stemcell = compiled_package.stemcell
|
12
|
+
@logger.info('Deleting compiled package: ' +
|
13
|
+
"#{package.name}/#{package.version}" +
|
14
|
+
"for #{stemcell.name}/#{stemcell.version}")
|
15
|
+
|
16
|
+
errors = []
|
17
|
+
if @blob_deleter.delete(compiled_package.blobstore_id, errors, options['force'])
|
18
|
+
compiled_package.destroy
|
19
|
+
end
|
20
|
+
errors
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Bosh::Director::Jobs
|
2
|
+
module Helpers
|
3
|
+
class NameVersionReleaseDeleter
|
4
|
+
def initialize(release_deleter, release_manager, release_version_deleter, logger)
|
5
|
+
@release_deleter = release_deleter
|
6
|
+
@release_manager = release_manager
|
7
|
+
@release_version_deleter = release_version_deleter
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_and_delete_release(name, version, force)
|
12
|
+
@logger.info("Looking up release: #{name}")
|
13
|
+
release = @release_manager.find_by_name(name)
|
14
|
+
@logger.info("Found release: #{release.name}")
|
15
|
+
|
16
|
+
if version
|
17
|
+
delete_release_version(release, version, force)
|
18
|
+
else
|
19
|
+
delete_entire_release(release, force)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def delete_entire_release(release, force)
|
26
|
+
@logger.info('Checking for any deployments still using the release')
|
27
|
+
deployments = release.versions.map { |version|
|
28
|
+
version.deployments
|
29
|
+
}.flatten.uniq
|
30
|
+
|
31
|
+
unless deployments.empty?
|
32
|
+
names = deployments.map { |d| d.name }.join(', ')
|
33
|
+
raise Bosh::Director::ReleaseInUse,
|
34
|
+
"Release `#{release.name}' is still in use by: #{names}"
|
35
|
+
end
|
36
|
+
@release_deleter.delete(release, force)
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete_release_version(release, version, force)
|
40
|
+
@logger.info("Looking up release version `#{release.name}/#{version}'")
|
41
|
+
release_version = @release_manager.find_version(release, version)
|
42
|
+
# found version may be different than the requested version, due to version formatting
|
43
|
+
@logger.info("Found release version: `#{release.name}/#{release_version.version}'")
|
44
|
+
@release_version_deleter.delete(release_version, release, force)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|