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.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bosh-director-worker +2 -14
  3. data/db/migrations/director/20150513225143_ip_addresses.rb +11 -0
  4. data/db/migrations/director/20150702004608_add_links.rb +8 -0
  5. data/db/migrations/director/20150708231924_add_link_spec.rb +7 -0
  6. data/db/migrations/director/20150724183256_add_debugging_to_ip_addresses.rb +8 -0
  7. data/db/migrations/director/20150730225029_add_uuid_to_instances.rb +16 -0
  8. data/db/migrations/director/20150803215805_add_availabililty_zone_and_cloud_properties_to_instances.rb +8 -0
  9. data/db/migrations/director/20150804211419_add_compilation_flag_to_instance.rb +7 -0
  10. data/db/migrations/director/20150918003455_add_bootstrap_node_to_instance.rb +7 -0
  11. data/db/migrations/director/20151008232214_add_dns_records.rb +7 -0
  12. data/db/migrations/director/20151015172551_add_orphan_disks_and_snapshots.rb +29 -0
  13. data/db/migrations/director/20151030222853_add_templates_to_instance.rb +10 -0
  14. data/db/migrations/director/20151031001039_add_spec_to_instance.rb +19 -0
  15. data/db/migrations/director/20151109190602_rename_orphan_columns.rb +13 -0
  16. data/lib/bosh/director.rb +19 -9
  17. data/lib/bosh/director/agent_client.rb +0 -17
  18. data/lib/bosh/director/api/cloud_config_manager.rb +7 -5
  19. data/lib/bosh/director/api/controllers/base_controller.rb +3 -2
  20. data/lib/bosh/director/api/controllers/cleanup_controller.rb +15 -0
  21. data/lib/bosh/director/api/controllers/deployments_controller.rb +38 -26
  22. data/lib/bosh/director/api/controllers/disks_controller.rb +20 -0
  23. data/lib/bosh/director/api/controllers/info_controller.rb +2 -2
  24. data/lib/bosh/director/api/controllers/releases_controller.rb +1 -16
  25. data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -9
  26. data/lib/bosh/director/api/deployment_manager.rb +2 -1
  27. data/lib/bosh/director/api/instance_lookup.rb +17 -0
  28. data/lib/bosh/director/api/instance_manager.rb +20 -10
  29. data/lib/bosh/director/api/release_manager.rb +28 -8
  30. data/lib/bosh/director/api/resurrector_manager.rb +9 -2
  31. data/lib/bosh/director/api/route_configuration.rb +2 -0
  32. data/lib/bosh/director/api/snapshot_manager.rb +9 -5
  33. data/lib/bosh/director/api/stemcell_manager.rb +50 -0
  34. data/lib/bosh/director/app.rb +1 -1
  35. data/lib/bosh/director/cloudcheck_helper.rb +119 -132
  36. data/lib/bosh/director/compile_task.rb +1 -1
  37. data/lib/bosh/director/compile_task_generator.rb +2 -2
  38. data/lib/bosh/director/config.rb +21 -12
  39. data/lib/bosh/director/deployment_deleter.rb +69 -0
  40. data/lib/bosh/director/deployment_plan.rb +35 -4
  41. data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +47 -0
  42. data/lib/bosh/director/deployment_plan/assembler.rb +115 -241
  43. data/lib/bosh/director/deployment_plan/availability_zone.rb +27 -0
  44. data/lib/bosh/director/deployment_plan/cloud_manifest_parser.rb +144 -35
  45. data/lib/bosh/director/deployment_plan/compilation_config.rb +21 -19
  46. data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +169 -0
  47. data/lib/bosh/director/deployment_plan/deployment_repo.rb +4 -8
  48. data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +13 -1
  49. data/lib/bosh/director/deployment_plan/deployment_validator.rb +17 -0
  50. data/lib/bosh/director/deployment_plan/desired_instance.rb +15 -0
  51. data/lib/bosh/director/deployment_plan/{disk_pool.rb → disk_type.rb} +14 -19
  52. data/lib/bosh/director/deployment_plan/dynamic_network.rb +105 -53
  53. data/lib/bosh/director/deployment_plan/dynamic_network_subnet.rb +13 -0
  54. data/lib/bosh/director/deployment_plan/env.rb +18 -0
  55. data/lib/bosh/director/deployment_plan/global_network_resolver.rb +77 -0
  56. data/lib/bosh/director/deployment_plan/instance.rb +222 -390
  57. data/lib/bosh/director/deployment_plan/instance_network_reservations.rb +71 -0
  58. data/lib/bosh/director/deployment_plan/instance_plan.rb +336 -0
  59. data/lib/bosh/director/deployment_plan/instance_plan_factory.rb +54 -0
  60. data/lib/bosh/director/deployment_plan/instance_plan_sorter.rb +61 -0
  61. data/lib/bosh/director/deployment_plan/instance_planner.rb +101 -0
  62. data/lib/bosh/director/deployment_plan/instance_repository.rb +36 -0
  63. data/lib/bosh/director/deployment_plan/instance_spec.rb +154 -0
  64. data/lib/bosh/director/deployment_plan/ip_provider/database_ip_repo.rb +136 -0
  65. data/lib/bosh/director/deployment_plan/ip_provider/in_memory_ip_repo.rb +81 -0
  66. data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +153 -0
  67. data/lib/bosh/director/deployment_plan/ip_provider/ip_provider_factory.rb +22 -0
  68. data/lib/bosh/director/deployment_plan/job.rb +116 -53
  69. data/lib/bosh/director/deployment_plan/job_availability_zone_parser.rb +49 -0
  70. data/lib/bosh/director/deployment_plan/job_migrator.rb +90 -0
  71. data/lib/bosh/director/deployment_plan/job_network.rb +42 -0
  72. data/lib/bosh/director/deployment_plan/job_network_parser.rb +118 -0
  73. data/lib/bosh/director/deployment_plan/job_spec_parser.rb +123 -126
  74. data/lib/bosh/director/deployment_plan/links/link.rb +30 -0
  75. data/lib/bosh/director/deployment_plan/links/link_lookup.rb +66 -0
  76. data/lib/bosh/director/deployment_plan/links/link_path.rb +27 -0
  77. data/lib/bosh/director/deployment_plan/links/links_resolver.rb +70 -0
  78. data/lib/bosh/director/deployment_plan/links/template_link.rb +21 -0
  79. data/lib/bosh/director/deployment_plan/manifest_migrator.rb +3 -17
  80. data/lib/bosh/director/deployment_plan/manifest_validator.rb +46 -0
  81. data/lib/bosh/director/deployment_plan/manual_network.rb +70 -97
  82. data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +148 -0
  83. data/lib/bosh/director/deployment_plan/network.rb +50 -39
  84. data/lib/bosh/director/deployment_plan/network_planner.rb +4 -0
  85. data/lib/bosh/director/deployment_plan/network_planner/plan.rb +26 -0
  86. data/lib/bosh/director/deployment_plan/network_planner/planner.rb +21 -0
  87. data/lib/bosh/director/deployment_plan/network_planner/reservation_reconciler.rb +81 -0
  88. data/lib/bosh/director/deployment_plan/network_planner/vip_static_ips_planner.rb +50 -0
  89. data/lib/bosh/director/deployment_plan/network_settings.rb +65 -0
  90. data/lib/bosh/director/deployment_plan/options/skip_drain.rb +7 -0
  91. data/lib/bosh/director/deployment_plan/package_validator.rb +79 -0
  92. data/lib/bosh/director/deployment_plan/placement_planner.rb +8 -0
  93. data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +90 -0
  94. data/lib/bosh/director/deployment_plan/placement_planner/bruteforce_ip_allocation.rb +124 -0
  95. data/lib/bosh/director/deployment_plan/placement_planner/index_assigner.rb +32 -0
  96. data/lib/bosh/director/deployment_plan/placement_planner/networks_to_static_ips.rb +125 -0
  97. data/lib/bosh/director/deployment_plan/placement_planner/placed_desired_instances.rb +40 -0
  98. data/lib/bosh/director/deployment_plan/placement_planner/plan.rb +42 -0
  99. data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +237 -0
  100. data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +53 -0
  101. data/lib/bosh/director/deployment_plan/planner.rb +186 -74
  102. data/lib/bosh/director/deployment_plan/planner_factory.rb +30 -147
  103. data/lib/bosh/director/deployment_plan/release_version.rb +3 -3
  104. data/lib/bosh/director/deployment_plan/resource_pool.rb +2 -174
  105. data/lib/bosh/director/deployment_plan/stemcell.rb +57 -14
  106. data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +28 -135
  107. data/lib/bosh/director/deployment_plan/steps/update_step.rb +23 -44
  108. data/lib/bosh/director/deployment_plan/template.rb +15 -4
  109. data/lib/bosh/director/deployment_plan/vip_network.rb +14 -42
  110. data/lib/bosh/director/deployment_plan/vm.rb +1 -99
  111. data/lib/bosh/director/deployment_plan/vm_type.rb +27 -0
  112. data/lib/bosh/director/disk_manager.rb +268 -0
  113. data/lib/bosh/director/dns/canonicalizer.rb +28 -0
  114. data/lib/bosh/director/dns/dns_manager.rb +163 -0
  115. data/lib/bosh/director/dns/local_dns_repo.rb +20 -0
  116. data/lib/bosh/director/dns/powerdns.rb +170 -0
  117. data/lib/bosh/director/errand/job_manager.rb +18 -29
  118. data/lib/bosh/director/error_ignorer.rb +16 -0
  119. data/lib/bosh/director/errors.rb +51 -20
  120. data/lib/bosh/director/event_log.rb +6 -0
  121. data/lib/bosh/director/instance_deleter.rb +53 -81
  122. data/lib/bosh/director/instance_reuser.rb +89 -0
  123. data/lib/bosh/director/instance_updater.rb +139 -281
  124. data/lib/bosh/director/instance_updater/preparer.rb +8 -5
  125. data/lib/bosh/director/instance_updater/state_applier.rb +21 -0
  126. data/lib/bosh/director/ip_util.rb +46 -26
  127. data/lib/bosh/director/job_renderer.rb +22 -10
  128. data/lib/bosh/director/job_runner.rb +1 -4
  129. data/lib/bosh/director/job_updater.rb +47 -35
  130. data/lib/bosh/director/job_updater_factory.rb +5 -4
  131. data/lib/bosh/director/jobs/base_job.rb +8 -0
  132. data/lib/bosh/director/jobs/cleanup_artifacts.rb +93 -0
  133. data/lib/bosh/director/jobs/delete_deployment.rb +10 -154
  134. data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
  135. data/lib/bosh/director/jobs/delete_orphan_disks.rb +44 -0
  136. data/lib/bosh/director/jobs/delete_release.rb +19 -196
  137. data/lib/bosh/director/jobs/delete_stemcell.rb +10 -76
  138. data/lib/bosh/director/jobs/export_release.rb +41 -121
  139. data/lib/bosh/director/jobs/fetch_logs.rb +0 -6
  140. data/lib/bosh/director/jobs/helpers.rb +10 -0
  141. data/lib/bosh/director/jobs/helpers/blob_deleter.rb +24 -0
  142. data/lib/bosh/director/jobs/helpers/compiled_package_deleter.rb +24 -0
  143. data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +48 -0
  144. data/lib/bosh/director/jobs/helpers/package_deleter.rb +33 -0
  145. data/lib/bosh/director/jobs/helpers/release_deleter.rb +52 -0
  146. data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +115 -0
  147. data/lib/bosh/director/jobs/helpers/releases_to_delete_picker.rb +31 -0
  148. data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +61 -0
  149. data/lib/bosh/director/jobs/helpers/stemcells_to_delete_picker.rb +30 -0
  150. data/lib/bosh/director/jobs/helpers/template_deleter.rb +20 -0
  151. data/lib/bosh/director/jobs/release/release_job.rb +18 -7
  152. data/lib/bosh/director/jobs/run_errand.rb +57 -36
  153. data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +46 -0
  154. data/lib/bosh/director/jobs/ssh.rb +50 -17
  155. data/lib/bosh/director/jobs/update_deployment.rb +29 -11
  156. data/lib/bosh/director/jobs/update_release.rb +25 -4
  157. data/lib/bosh/director/jobs/vm_state.rb +23 -32
  158. data/lib/bosh/director/lock.rb +13 -8
  159. data/lib/bosh/director/logs_fetcher.rb +1 -1
  160. data/lib/bosh/director/models.rb +3 -0
  161. data/lib/bosh/director/models/compiled_package.rb +3 -3
  162. data/lib/bosh/director/models/deployment.rb +10 -0
  163. data/lib/bosh/director/models/instance.rb +77 -1
  164. data/lib/bosh/director/models/ip_address.rb +26 -0
  165. data/lib/bosh/director/models/orphan_disk.rb +23 -0
  166. data/lib/bosh/director/models/orphan_snapshot.rb +14 -0
  167. data/lib/bosh/director/models/template.rb +32 -9
  168. data/lib/bosh/director/models/vm.rb +5 -8
  169. data/lib/bosh/director/network_reservation.rb +69 -99
  170. data/lib/bosh/director/problem_handlers/inactive_disk.rb +5 -20
  171. data/lib/bosh/director/problem_handlers/missing_disk.rb +2 -13
  172. data/lib/bosh/director/problem_resolver.rb +2 -2
  173. data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +2 -21
  174. data/lib/bosh/director/scheduler.rb +23 -6
  175. data/lib/bosh/director/{instance_updater/stopper.rb → stopper.rb} +24 -18
  176. data/lib/bosh/director/tagged_logger.rb +30 -0
  177. data/lib/bosh/director/transactor.rb +9 -0
  178. data/lib/bosh/director/version.rb +1 -1
  179. data/lib/bosh/director/vm_creator.rb +91 -19
  180. data/lib/bosh/director/vm_deleter.rb +25 -0
  181. data/lib/bosh/director/vm_recreator.rb +15 -0
  182. data/lib/cloud/dummy.rb +381 -94
  183. metadata +110 -30
  184. data/lib/bosh/director/deployment_plan/dns_binder.rb +0 -45
  185. data/lib/bosh/director/deployment_plan/instance_vm_binder.rb +0 -37
  186. data/lib/bosh/director/deployment_plan/network_subnet.rb +0 -166
  187. data/lib/bosh/director/deployment_plan/resource_pools.rb +0 -68
  188. data/lib/bosh/director/dns_helper.rb +0 -223
  189. data/lib/bosh/director/instance_updater/network_updater.rb +0 -110
  190. data/lib/bosh/director/instance_updater/vm_updater.rb +0 -189
  191. data/lib/bosh/director/problem_handlers/out_of_sync_vm.rb +0 -64
  192. data/lib/bosh/director/problem_handlers/unbound_instance_vm.rb +0 -85
  193. data/lib/bosh/director/resource_pool_updater.rb +0 -174
  194. data/lib/bosh/director/vm_data.rb +0 -63
  195. 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
- event_log.track("Delete stemcell") do
55
- @cloud.delete_stemcell(@stemcell.cid)
56
- end
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
- def delete_stemcell_metadata
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
- def desc
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
- stemcell_manager = Bosh::Director::Api::StemcellManager.new
31
- @stemcell = stemcell_manager.find_by_os_and_version(@stemcell_os, @stemcell_version)
32
-
33
- logger.info "Will compile with stemcell: #{@stemcell.desc}"
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
- @targeted_deployment = deployment_manager.find_by_name(@deployment_name)
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
- @release_version_model = release_manager.find_version(release, @release_version)
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
- validate_release_packages
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(@stemcell.name, @stemcell.version, :timeout => lock_timeout) do
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
- @deployment_manifest["releases"].each do |release|
78
- if (release["name"] == @release_name) && (release["version"].to_s == @release_version.to_s)
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 create_planner(stemcell_manager)
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(@release_version_model, @stemcell)
135
- templates = @release_version_model.templates.map
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, @stemcell)
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
- :blobstore_id => oid,
153
- :sha1 => Digest::SHA1.file(output_path).hexdigest,
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 create_fake_job(planner, fake_resource_pool_manifest, network_name)
160
- fake_job_spec_for_compiling = {
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
- fake_job = DeploymentPlan::Job.parse(planner, fake_job_spec_for_compiling, Config.event_log, Config.logger)
172
- @release_version_model.packages.each { |package| fake_job.packages[package.name] = package }
173
- fake_job.resource_pool.stemcell.bind_model
174
- fake_job.release.bind_model
175
- fake_job.templates.each { |template| template.bind_models }
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
- unless faults.empty?
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