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
@@ -10,31 +10,23 @@ module Bosh::Director
10
10
  attr_reader :compilations_performed
11
11
 
12
12
  # @param [DeploymentPlan] deployment_plan Deployment plan
13
- def initialize(deployment_plan, cloud, logger, event_log, director_job)
14
- @deployment_plan = deployment_plan
15
-
16
- @cloud = cloud
13
+ def initialize(jobs_to_compile, compilation_config, compilation_instance_pool, logger, event_log, director_job)
17
14
  @event_log = event_log
18
15
  @logger = logger
19
16
  @director_job = director_job
20
17
 
21
18
  @tasks_mutex = Mutex.new
22
- @network_mutex = Mutex.new
23
19
  @counter_mutex = Mutex.new
24
20
 
25
- compilation_config = @deployment_plan.compilation
26
-
27
- @network = compilation_config.network
28
- @compilation_resources = compilation_config.cloud_properties
29
- @compilation_env = compilation_config.env
30
-
31
- @vm_reuser = VmReuser.new
21
+ @compilation_instance_pool = compilation_instance_pool
32
22
 
33
23
  @compile_task_generator = CompileTaskGenerator.new(@logger, @event_log)
34
24
 
35
25
  @compile_tasks = {}
36
26
  @ready_tasks = []
37
27
  @compilations_performed = 0
28
+ @jobs_to_compile = jobs_to_compile
29
+ @compilation_config = compilation_config
38
30
  end
39
31
 
40
32
  def perform
@@ -64,8 +56,6 @@ module Bosh::Director
64
56
  @tasks_mutex.synchronize { @ready_tasks.size }
65
57
  end
66
58
 
67
-
68
-
69
59
  def compile_package(task)
70
60
  package = task.package
71
61
  stemcell = task.stemcell
@@ -74,22 +64,26 @@ module Bosh::Director
74
64
  # Check if the package was compiled in a parallel deployment
75
65
  compiled_package = task.find_compiled_package(@logger, @event_log)
76
66
  if compiled_package.nil?
77
- build = Models::CompiledPackage.generate_build_number(package, stemcell)
67
+ build = Models::CompiledPackage.generate_build_number(package, stemcell.model)
78
68
  task_result = nil
79
69
 
80
- prepare_vm(stemcell) do |vm_data|
81
- vm_metadata_updater.update(vm_data.vm, :compiling => package.name)
70
+ prepare_vm(stemcell) do |instance|
71
+ vm_metadata_updater.update(instance.vm.model, :compiling => package.name)
82
72
  agent_task =
83
- vm_data.agent.compile_package(package.blobstore_id,
84
- package.sha1, package.name,
85
- "#{package.version}.#{build}",
86
- task.dependency_spec)
73
+ instance.agent_client.compile_package(
74
+ package.blobstore_id,
75
+ package.sha1,
76
+ package.name,
77
+ "#{package.version}.#{build}",
78
+ task.dependency_spec
79
+ )
80
+
87
81
  task_result = agent_task['result']
88
82
  end
89
83
 
90
84
  compiled_package = Models::CompiledPackage.create do |p|
91
85
  p.package = package
92
- p.stemcell = stemcell
86
+ p.stemcell = stemcell.model
93
87
  p.sha1 = task_result['sha1']
94
88
  p.build = build
95
89
  p.blobstore_id = task_result['blobstore_id']
@@ -118,65 +112,12 @@ module Bosh::Director
118
112
  # passed in. The VMs are yielded and their destruction is ensured.
119
113
  # @param [Models::Stemcell] stemcell The stemcells that need to have
120
114
  # compilation VMs created.
121
- # @yield [VmData] Yields a VmData object that contains all the data for the
122
- # VM that should be used for compilation. This may be a reused VM or a
123
- # freshly created VM.
115
+ # @yield [DeploymentPlan::Instance] Yields an instance that should be used for compilation. This may be a reused VM or a
124
116
  def prepare_vm(stemcell)
125
- # If we're reusing VMs, try to just return an already-created VM.
126
- if @deployment_plan.compilation.reuse_compilation_vms
127
- vm_data = @vm_reuser.get_vm(stemcell)
128
- if vm_data
129
- @logger.info("Reusing compilation VM `#{vm_data.vm.cid}' for stemcell `#{stemcell.desc}'")
130
- begin
131
- yield vm_data
132
- ensure
133
- vm_data.release
134
- end
135
- return
136
- end
137
- # This shouldn't happen. If it does there's a bug.
138
- if @vm_reuser.get_num_vms(stemcell) >=
139
- @deployment_plan.compilation.workers
140
- raise PackageCompilationNotEnoughWorkersForReuse,
141
- 'There should never be more VMs for a stemcell than the number of workers in reuse_compilation_vms mode'
142
- end
143
- end
144
-
145
- @logger.info("Creating compilation VM for stemcell `#{stemcell.desc}'")
146
-
147
- reservation = reserve_network
148
-
149
- network_settings = {
150
- @network.name => @network.network_settings(reservation)
151
- }
152
-
153
- vm = VmCreator.create(@deployment_plan.model, stemcell,
154
- @compilation_resources, network_settings,
155
- nil, @compilation_env)
156
- vm_data = @vm_reuser.add_vm(reservation, vm, stemcell, network_settings)
157
-
158
- @logger.info("Configuring compilation VM: #{vm.cid}")
159
-
160
- begin
161
- agent = AgentClient.with_defaults(vm.agent_id)
162
- agent.wait_until_ready
163
- agent.update_settings(Bosh::Director::Config.trusted_certs)
164
- vm.update(:trusted_certs_sha1 => Digest::SHA1.hexdigest(Bosh::Director::Config.trusted_certs))
165
-
166
- configure_vm(vm, agent, network_settings)
167
- vm_data.agent = agent
168
- yield vm_data
169
- rescue RpcTimeout, TaskCancelled => e
170
- # if we time out waiting for the agent or task was cancelled, we should clean up the the VM
171
- # as it will leave us in an unrecoverable state otherwise
172
- @vm_reuser.remove_vm(vm_data)
173
- tear_down_vm(vm_data)
174
- raise e
175
- ensure
176
- vm_data.release
177
- unless @deployment_plan.compilation.reuse_compilation_vms
178
- tear_down_vm(vm_data)
179
- end
117
+ if @compilation_config.reuse_compilation_vms
118
+ @compilation_instance_pool.with_reused_vm(stemcell, &Proc.new)
119
+ else
120
+ @compilation_instance_pool.with_single_use_vm(stemcell, &Proc.new)
180
121
  end
181
122
  end
182
123
 
@@ -186,8 +127,8 @@ module Bosh::Director
186
127
  @event_log.begin_stage('Preparing package compilation', 1)
187
128
 
188
129
  @event_log.track('Finding packages to compile') do
189
- @deployment_plan.jobs.each do |job|
190
- stemcell = job.resource_pool.stemcell
130
+ @jobs_to_compile.each do |job|
131
+ stemcell = job.stemcell
191
132
 
192
133
  template_descs = job.templates.map do |t|
193
134
  # we purposefully did NOT inline those because
@@ -197,55 +138,22 @@ module Bosh::Director
197
138
  template_name = t.name
198
139
  "`#{release_name}/#{template_name}'"
199
140
  end
200
- @logger.info("Job templates #{template_descs.join(', ')} need to run on stemcell `#{stemcell.model.desc}'")
141
+ @logger.info("Job templates #{template_descs.join(', ')} need to run on stemcell `#{stemcell.desc}'")
201
142
 
202
143
  job.templates.each do |template|
203
144
  template.package_models.each do |package|
204
- @compile_task_generator.generate!(@compile_tasks, job, template, package, stemcell.model)
145
+ @compile_task_generator.generate!(@compile_tasks, job, template, package, stemcell)
205
146
  end
206
147
  end
207
148
  end
208
149
  end
209
150
  end
210
151
 
211
- def tear_down_vm(vm_data)
212
- vm = vm_data.vm
213
- if vm.exists?
214
- reservation = vm_data.reservation
215
- @logger.info("Deleting compilation VM: #{vm.cid}")
216
- @cloud.delete_vm(vm.cid)
217
- vm.destroy
218
- release_network(reservation)
219
- end
220
- end
221
-
222
- def reserve_network
223
- reservation = NetworkReservation.new_dynamic
224
-
225
- @network_mutex.synchronize do
226
- @network.reserve(reservation)
227
- end
228
-
229
- unless reservation.reserved?
230
- raise PackageCompilationNetworkNotReserved,
231
- "Could not reserve network for package compilation: #{reservation.error}"
232
- end
233
-
234
- reservation
235
- end
236
-
237
- def release_network(reservation)
238
- @network_mutex.synchronize do
239
- @network.release(reservation)
240
- end
241
- end
242
-
243
152
  def compile_packages
244
153
  @event_log.begin_stage('Compiling packages', compilation_count)
245
- number_of_workers = @deployment_plan.compilation.workers
246
154
 
247
155
  begin
248
- ThreadPool.new(:max_threads => number_of_workers).wrap do |pool|
156
+ ThreadPool.new(:max_threads => @compilation_config.workers).wrap do |pool|
249
157
  loop do
250
158
  # process as many tasks without waiting
251
159
  loop do
@@ -263,15 +171,11 @@ module Bosh::Director
263
171
  ensure
264
172
  # Delete all of the VMs if we were reusing compilation VMs. This can't
265
173
  # happen until everything was done compiling.
266
- if @deployment_plan.compilation.reuse_compilation_vms
174
+ if @compilation_config.reuse_compilation_vms
267
175
  # Using a new ThreadPool instead of reusing the previous one,
268
176
  # as if there's a failed compilation, the thread pool will stop
269
177
  # processing any new thread.
270
- ThreadPool.new(:max_threads => number_of_workers).wrap do |pool|
271
- @vm_reuser.each do |vm_data|
272
- pool.process { tear_down_vm(vm_data) }
273
- end
274
- end
178
+ @compilation_instance_pool.delete_instances(@compilation_config.workers)
275
179
  end
276
180
  end
277
181
  end
@@ -315,17 +219,6 @@ module Bosh::Director
315
219
  @director_job.task_checkpoint if @director_job
316
220
  end
317
221
 
318
- def configure_vm(vm, agent, network_settings)
319
- state = {
320
- 'deployment' => @deployment_plan.name,
321
- 'resource_pool' => {},
322
- 'networks' => network_settings
323
- }
324
-
325
- vm.update(:apply_spec => state)
326
- agent.apply(state)
327
- end
328
-
329
222
  def compilation_count
330
223
  counter = 0
331
224
  @compile_tasks.each_value do |task|
@@ -2,18 +2,19 @@ module Bosh::Director
2
2
  module DeploymentPlan
3
3
  module Steps
4
4
  class UpdateStep
5
- def initialize(base_job, event_log, resource_pools, deployment_plan, multi_job_updater, cloud, blobstore)
5
+ def initialize(base_job, event_log, deployment_plan, multi_job_updater, cloud)
6
6
  @base_job = base_job
7
7
  @logger = base_job.logger
8
8
  @event_log = event_log
9
- @resource_pools = resource_pools
10
9
  @cloud = cloud
11
- @blobstore = blobstore
12
10
  @deployment_plan = deployment_plan
13
11
  @multi_job_updater = multi_job_updater
12
+ @vm_deleter = Bosh::Director::VmDeleter.new(@cloud, @logger)
13
+ @disk_manager = DiskManager.new(@cloud, @logger)
14
+ job_renderer = JobRenderer.create
15
+ @vm_creator = Bosh::Director::VmCreator.new(@cloud, @logger, @vm_deleter, @disk_manager, job_renderer)
14
16
  end
15
17
 
16
-
17
18
  def perform
18
19
  begin
19
20
  @logger.info('Updating deployment')
@@ -36,17 +37,11 @@ module Bosh::Director
36
37
  @logger.info('Deleting no longer needed instances')
37
38
  delete_unneeded_instances
38
39
 
39
- @logger.info('Updating resource pools')
40
- @resource_pools.update
41
- @base_job.task_checkpoint
42
-
43
- @logger.info('Binding instance VMs')
44
- bind_instance_vms
40
+ @logger.info('Creating missing VMs')
41
+ # TODO: something about instance_plans.select(&:new?) -- how does that compare to the isntance#has_vm? check?
42
+ @vm_creator.create_for_instance_plans(@deployment_plan.instance_plans_with_missing_vms, @deployment_plan.ip_provider, @event_log)
45
43
 
46
- @event_log.begin_stage('Preparing configuration', 1)
47
- @base_job.track_and_log('Binding configuration') do
48
- bind_configuration
49
- end
44
+ @base_job.task_checkpoint
50
45
  end
51
46
 
52
47
  def update_jobs
@@ -56,27 +51,11 @@ module Bosh::Director
56
51
  @deployment_plan,
57
52
  @deployment_plan.jobs_starting_on_deploy,
58
53
  )
59
-
60
- @logger.info('Refilling resource pools')
61
- @resource_pools.refill
62
- end
63
-
64
- private
65
-
66
- def bind_instance_vms
67
- jobs = @deployment_plan.jobs_starting_on_deploy
68
- instances = jobs.map(&:instances).flatten
69
-
70
- binder = DeploymentPlan::InstanceVmBinder.new(@event_log)
71
- binder.bind_instance_vms(instances)
72
54
  end
73
55
 
74
56
  def delete_unneeded_vms
75
57
  unneeded_vms = @deployment_plan.unneeded_vms
76
- if unneeded_vms.empty?
77
- @logger.info('No unneeded vms to delete')
78
- return
79
- end
58
+ return @logger.info('No unneeded vms to delete') if unneeded_vms.empty?
80
59
 
81
60
  @event_log.begin_stage('Deleting unneeded VMs', unneeded_vms.size)
82
61
  ThreadPool.new(max_threads: Config.max_threads, logger: @logger).wrap do |pool|
@@ -84,8 +63,7 @@ module Bosh::Director
84
63
  pool.process do
85
64
  @event_log.track(vm_model.cid) do
86
65
  @logger.info("Delete unneeded VM #{vm_model.cid}")
87
- @cloud.delete_vm(vm_model.cid)
88
- vm_model.destroy
66
+ @vm_deleter.delete_vm(vm_model)
89
67
  end
90
68
  end
91
69
  end
@@ -98,19 +76,20 @@ module Bosh::Director
98
76
  @logger.info('No unneeded instances to delete')
99
77
  return
100
78
  end
101
-
102
79
  event_log_stage = @event_log.begin_stage('Deleting unneeded instances', unneeded_instances.size)
103
- instance_deleter = InstanceDeleter.new(@deployment_plan)
104
- instance_deleter.delete_instances(unneeded_instances, event_log_stage)
105
- @logger.info('Deleted no longer needed instances')
106
- end
107
-
108
- # Calculates configuration checksums for all jobs in this deployment plan
109
- # @return [void]
110
- def bind_configuration
111
- @deployment_plan.jobs_starting_on_deploy.each do |job|
112
- JobRenderer.new(job, @blobstore).render_job_instances
80
+ dns_manager = DnsManager.create
81
+ instance_deleter = InstanceDeleter.new(@deployment_plan.ip_provider, dns_manager, @disk_manager)
82
+ unneeded_instance_plans = unneeded_instances.map do |instance|
83
+ DeploymentPlan::InstancePlan.new(
84
+ existing_instance: instance,
85
+ instance: nil,
86
+ desired_instance: nil,
87
+ network_plans: [],
88
+ recreate_deployment: @deployment_plan.recreate
89
+ )
113
90
  end
91
+ instance_deleter.delete_instance_plans(unneeded_instance_plans, event_log_stage)
92
+ @logger.info('Deleted no longer needed instances')
114
93
  end
115
94
  end
116
95
  end
@@ -1,5 +1,3 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
1
  module Bosh::Director
4
2
  module DeploymentPlan
5
3
  class Template
@@ -34,6 +32,10 @@ module Bosh::Director
34
32
  end
35
33
  end
36
34
 
35
+ def bind_existing_model(model)
36
+ @model = model
37
+ end
38
+
37
39
  # Downloads template blob to a given path
38
40
  # @return [String] Path to downloaded blob
39
41
  def download_blob
@@ -78,6 +80,16 @@ module Bosh::Director
78
80
  present_model.properties
79
81
  end
80
82
 
83
+ # return [Array]
84
+ def required_links
85
+ present_model.requires.to_a.map { |l| TemplateLink.parse(l) }
86
+ end
87
+
88
+ # return [Array]
89
+ def provided_links
90
+ present_model.provides.to_a.map { |l| TemplateLink.parse(l) }
91
+ end
92
+
81
93
  private
82
94
 
83
95
  # Returns model only if it's present, fails otherwise
@@ -88,7 +100,6 @@ module Bosh::Director
88
100
  end
89
101
  @model
90
102
  end
91
-
92
103
  end
93
104
  end
94
- end
105
+ end
@@ -1,5 +1,3 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
1
  module Bosh::Director
4
2
  module DeploymentPlan
5
3
  class VipNetwork < Network
@@ -11,49 +9,15 @@ module Bosh::Director
11
9
  ##
12
10
  # Creates a new network.
13
11
  #
14
- # @param [DeploymentPlan] deployment associated deployment plan
15
12
  # @param [Hash] network_spec parsed deployment manifest network section
16
- def initialize(deployment, network_spec)
17
- super
13
+ # @param [Logger] logger
14
+ def initialize(network_spec, logger)
15
+ super(safe_property(network_spec, "name", :class => String), logger)
16
+
18
17
  @cloud_properties = safe_property(network_spec, "cloud_properties",
19
18
  class: Hash, default: {})
20
19
  @reserved_ips = Set.new
21
- end
22
-
23
- ##
24
- # Reserves a network resource.
25
- #
26
- # This is either an already used reservation being verified or a new one
27
- # waiting to be fulfilled.
28
- # @param [NetworkReservation] reservation
29
- # @return [Boolean] true if the reservation was fulfilled
30
- def reserve(reservation)
31
- reservation.reserved = false
32
- if reservation.ip.nil?
33
- raise NetworkReservationIpMissing,
34
- "Must have IP for static reservations"
35
- elsif reservation.dynamic?
36
- reservation.error = NetworkReservation::WRONG_TYPE
37
- elsif @reserved_ips.include?(reservation.ip)
38
- reservation.error = NetworkReservation::USED
39
- else
40
- reservation.reserved = true
41
- reservation.type = NetworkReservation::STATIC
42
- @reserved_ips.add(reservation.ip)
43
- end
44
- reservation.reserved?
45
- end
46
-
47
- ##
48
- # Releases a previous reservation that had been fulfilled.
49
- # @param [NetworkReservation] reservation
50
- # @return [void]
51
- def release(reservation)
52
- unless reservation.ip
53
- raise NetworkReservationIpMissing,
54
- "Can't release reservation without an IP"
55
- end
56
- @reserved_ips.delete(reservation.ip)
20
+ @logger = TaggedLogger.new(logger, 'network-configuration')
57
21
  end
58
22
 
59
23
  ##
@@ -62,7 +26,7 @@ module Bosh::Director
62
26
  # @param [NetworkReservation] reservation
63
27
  # @param [Array<String>] default_properties
64
28
  # @return [Hash] network settings that will be passed to the BOSH Agent
65
- def network_settings(reservation, default_properties = VALID_DEFAULTS)
29
+ def network_settings(reservation, default_properties = VALID_DEFAULTS, availability_zone = nil)
66
30
  if default_properties && !default_properties.empty?
67
31
  raise NetworkReservationVipDefaultProvided,
68
32
  "Can't provide any defaults since this is a VIP network"
@@ -74,6 +38,14 @@ module Bosh::Director
74
38
  "cloud_properties" => @cloud_properties
75
39
  }
76
40
  end
41
+
42
+ def ip_type(_)
43
+ :static
44
+ end
45
+
46
+ def has_azs?(az_names)
47
+ true
48
+ end
77
49
  end
78
50
  end
79
51
  end