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
@@ -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(
|
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
|
-
|
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 |
|
81
|
-
vm_metadata_updater.update(
|
70
|
+
prepare_vm(stemcell) do |instance|
|
71
|
+
vm_metadata_updater.update(instance.vm.model, :compiling => package.name)
|
82
72
|
agent_task =
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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 [
|
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
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
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
|
-
@
|
190
|
-
stemcell = job.
|
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.
|
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
|
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 =>
|
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 @
|
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
|
-
|
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,
|
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('
|
40
|
-
|
41
|
-
@
|
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
|
-
@
|
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
|
-
@
|
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
|
-
|
104
|
-
instance_deleter.
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
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
|
-
|
17
|
-
|
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
|
-
|
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
|