bosh-director 1.3215.4.0 → 1.3232.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-console +1 -1
- data/bin/bosh-director-drain-workers +8 -2
- data/bin/bosh-director-worker +34 -53
- data/db/migrations/director/20110617211923_add_deployments_release_versions.rb +2 -2
- data/db/migrations/director/20120524175805_add_task_type.rb +23 -23
- data/db/migrations/director/20130531172604_add_director_attributes.rb +1 -2
- data/db/migrations/director/20140116002324_pivot_director_attributes.rb +1 -2
- data/db/migrations/director/20160210201838_denormalize_compiled_package_stemcell_id_to_stemcell_name_and_version.rb +7 -9
- data/db/migrations/director/20160211174110_add_events.rb +22 -0
- data/db/migrations/director/20160324181932_create_delayed_jobs.rb +22 -0
- data/db/migrations/director/20160324182211_add_locks.rb +15 -0
- data/db/migrations/director/20160329201256_set_instances_with_nil_serial_to_false.rb +15 -0
- data/db/migrations/director/20160331225404_backfill_stemcell_os.rb +9 -0
- data/db/migrations/director/20160411104407_add_task_started_at.rb +9 -0
- data/lib/bosh/director.rb +9 -2
- data/lib/bosh/director/agent_client.rb +22 -9
- data/lib/bosh/director/api.rb +0 -1
- data/lib/bosh/director/api/api_helper.rb +1 -1
- data/lib/bosh/director/api/controllers/base_controller.rb +5 -1
- data/lib/bosh/director/api/controllers/cloud_configs_controller.rb +18 -2
- data/lib/bosh/director/api/controllers/deployments_controller.rb +16 -9
- data/lib/bosh/director/api/controllers/events_controller.rb +37 -0
- data/lib/bosh/director/api/controllers/locks_controller.rb +7 -11
- data/lib/bosh/director/api/controllers/packages_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/runtime_configs_controller.rb +18 -2
- data/lib/bosh/director/api/controllers/tasks_controller.rb +7 -2
- data/lib/bosh/director/api/deployment_lookup.rb +1 -1
- data/lib/bosh/director/api/deployment_manager.rb +1 -1
- data/lib/bosh/director/api/event_manager.rb +68 -0
- data/lib/bosh/director/api/extensions/scoping.rb +2 -2
- data/lib/bosh/director/api/extensions/syslog_request_logger.rb +75 -0
- data/lib/bosh/director/api/instance_lookup.rb +2 -2
- data/lib/bosh/director/api/instance_manager.rb +2 -2
- data/lib/bosh/director/api/local_identity_provider.rb +8 -0
- data/lib/bosh/director/api/property_manager.rb +6 -5
- data/lib/bosh/director/api/release_manager.rb +3 -3
- data/lib/bosh/director/api/resource_manager.rb +2 -2
- data/lib/bosh/director/api/resurrector_manager.rb +1 -1
- data/lib/bosh/director/api/route_configuration.rb +1 -0
- data/lib/bosh/director/api/stemcell_manager.rb +5 -5
- data/lib/bosh/director/api/task_manager.rb +1 -0
- data/lib/bosh/director/api/task_remover.rb +1 -1
- data/lib/bosh/director/api/uaa_identity_provider.rb +9 -1
- data/lib/bosh/director/api/user/database_user_manager.rb +1 -1
- data/lib/bosh/director/app.rb +1 -1
- data/lib/bosh/director/arp_flusher.rb +23 -0
- data/lib/bosh/director/cloudcheck_helper.rb +4 -3
- data/lib/bosh/director/compile_task.rb +6 -6
- data/lib/bosh/director/compile_task_generator.rb +6 -6
- data/lib/bosh/director/compiled_release_downloader.rb +4 -4
- data/lib/bosh/director/config.rb +29 -87
- data/lib/bosh/director/deployment_deleter.rb +6 -6
- data/lib/bosh/director/deployment_plan/agent_state_migrator.rb +2 -2
- data/lib/bosh/director/deployment_plan/assembler.rb +1 -1
- data/lib/bosh/director/deployment_plan/compilation_instance_pool.rb +26 -1
- data/lib/bosh/director/deployment_plan/deployment_repo.rb +1 -1
- data/lib/bosh/director/deployment_plan/disk_type.rb +1 -1
- data/lib/bosh/director/deployment_plan/instance.rb +2 -2
- data/lib/bosh/director/deployment_plan/instance_plan.rb +2 -2
- data/lib/bosh/director/deployment_plan/instance_spec.rb +2 -0
- data/lib/bosh/director/deployment_plan/ip_provider/ip_provider.rb +7 -3
- data/lib/bosh/director/deployment_plan/job.rb +12 -10
- data/lib/bosh/director/deployment_plan/job_spec_parser.rb +4 -4
- data/lib/bosh/director/deployment_plan/links/link.rb +1 -0
- data/lib/bosh/director/deployment_plan/links/link_path.rb +18 -19
- data/lib/bosh/director/deployment_plan/links/links_resolver.rb +2 -0
- data/lib/bosh/director/deployment_plan/links/template_link.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +6 -6
- data/lib/bosh/director/deployment_plan/planner.rb +3 -3
- data/lib/bosh/director/deployment_plan/planner_factory.rb +38 -40
- data/lib/bosh/director/deployment_plan/release_version.rb +5 -5
- data/lib/bosh/director/deployment_plan/runtime_manifest_parser.rb +22 -18
- data/lib/bosh/director/deployment_plan/steps/package_compile_step.rb +14 -16
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +5 -5
- data/lib/bosh/director/deployment_plan/template.rb +61 -1
- data/lib/bosh/director/deployment_plan/update_config.rb +1 -1
- data/lib/bosh/director/disk_manager.rb +49 -40
- data/lib/bosh/director/dns/canonicalizer.rb +2 -2
- data/lib/bosh/director/dns/dns_manager.rb +2 -2
- data/lib/bosh/director/dns/powerdns.rb +2 -2
- data/lib/bosh/director/download_helper.rb +5 -5
- data/lib/bosh/director/errand/job_manager.rb +5 -6
- data/lib/bosh/director/errand/result.rb +1 -1
- data/lib/bosh/director/errand/runner.rb +2 -3
- data/lib/bosh/director/event_log.rb +1 -7
- data/lib/bosh/director/ext.rb +0 -6
- data/lib/bosh/director/instance_deleter.rb +23 -2
- data/lib/bosh/director/instance_updater.rb +62 -6
- data/lib/bosh/director/instance_updater/state_applier.rb +2 -2
- data/lib/bosh/director/job_queue.rb +4 -2
- data/lib/bosh/director/job_runner.rb +3 -8
- data/lib/bosh/director/jobs/backup.rb +1 -1
- data/lib/bosh/director/jobs/base_job.rb +10 -6
- data/lib/bosh/director/jobs/cleanup_artifacts.rb +6 -6
- data/lib/bosh/director/jobs/db_job.rb +87 -0
- data/lib/bosh/director/jobs/delete_deployment.rb +23 -2
- data/lib/bosh/director/jobs/delete_deployment_snapshots.rb +1 -1
- data/lib/bosh/director/jobs/delete_orphan_disks.rb +2 -2
- data/lib/bosh/director/jobs/delete_release.rb +2 -2
- data/lib/bosh/director/jobs/delete_stemcell.rb +1 -1
- data/lib/bosh/director/jobs/export_release.rb +4 -2
- data/lib/bosh/director/jobs/fetch_logs.rb +1 -1
- data/lib/bosh/director/jobs/helpers/blob_deleter.rb +1 -1
- data/lib/bosh/director/jobs/helpers/name_version_release_deleter.rb +3 -3
- data/lib/bosh/director/jobs/helpers/release_version_deleter.rb +1 -1
- data/lib/bosh/director/jobs/helpers/stemcell_deleter.rb +2 -12
- data/lib/bosh/director/jobs/release/release_job.rb +13 -28
- data/lib/bosh/director/jobs/run_errand.rb +6 -6
- data/lib/bosh/director/jobs/scheduled_backup.rb +1 -1
- data/lib/bosh/director/jobs/scheduled_events_cleanup.rb +31 -0
- data/lib/bosh/director/jobs/scheduled_orphan_cleanup.rb +1 -1
- data/lib/bosh/director/jobs/snapshot_deployment.rb +4 -1
- data/lib/bosh/director/jobs/ssh.rb +36 -14
- data/lib/bosh/director/jobs/update_deployment.rb +28 -6
- data/lib/bosh/director/jobs/update_release.rb +31 -41
- data/lib/bosh/director/jobs/update_stemcell.rb +4 -4
- data/lib/bosh/director/jobs/vm_state.rb +1 -2
- data/lib/bosh/director/lock.rb +30 -55
- data/lib/bosh/director/logs_fetcher.rb +2 -3
- data/lib/bosh/director/manifest/changeset.rb +88 -42
- data/lib/bosh/director/manifest/manifest.rb +1 -1
- data/lib/bosh/director/models.rb +3 -0
- data/lib/bosh/director/models/event.rb +18 -0
- data/lib/bosh/director/models/lock.rb +9 -0
- data/lib/bosh/director/models/release_version.rb +3 -1
- data/lib/bosh/director/problem_handlers/base.rb +3 -3
- data/lib/bosh/director/problem_handlers/inactive_disk.rb +4 -4
- data/lib/bosh/director/problem_handlers/missing_disk.rb +3 -3
- data/lib/bosh/director/problem_handlers/missing_vm.rb +1 -1
- data/lib/bosh/director/problem_handlers/mount_info_mismatch.rb +3 -3
- data/lib/bosh/director/problem_handlers/unresponsive_agent.rb +2 -2
- data/lib/bosh/director/problem_resolver.rb +5 -5
- data/lib/bosh/director/problem_scanner/problem_register.rb +1 -1
- data/lib/bosh/director/problem_scanner/scanner.rb +3 -2
- data/lib/bosh/director/scheduler.rb +3 -3
- data/lib/bosh/director/sequel.rb +1 -3
- data/lib/bosh/director/stopper.rb +1 -1
- data/lib/bosh/director/validation_helper.rb +60 -37
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_creator.rb +39 -7
- data/lib/bosh/director/vm_deleter.rb +29 -2
- data/lib/bosh/director/vm_metadata_updater.rb +4 -0
- data/lib/bosh/director/worker.rb +52 -0
- metadata +47 -61
- data/lib/bosh/director/manifest/redactor.rb +0 -44
@@ -121,7 +121,8 @@ module Bosh::Director
|
|
121
121
|
vm_deleter = VmDeleter.new(cloud, @logger)
|
122
122
|
disk_manager = DiskManager.new(cloud, @logger)
|
123
123
|
job_renderer = JobRenderer.create
|
124
|
-
|
124
|
+
arp_flusher = ArpFlusher.new
|
125
|
+
vm_creator = Bosh::Director::VmCreator.new(cloud, @logger, vm_deleter, disk_manager, job_renderer, arp_flusher)
|
125
126
|
dns_manager = DnsManagerProvider.create
|
126
127
|
instance_deleter = Bosh::Director::InstanceDeleter.new(ip_provider, dns_manager, disk_manager)
|
127
128
|
compilation_instance_pool = CompilationInstancePool.new(
|
@@ -136,7 +137,6 @@ module Bosh::Director
|
|
136
137
|
compilation,
|
137
138
|
compilation_instance_pool,
|
138
139
|
@logger,
|
139
|
-
Config.event_log,
|
140
140
|
nil
|
141
141
|
)
|
142
142
|
package_compile_step.perform
|
@@ -179,7 +179,7 @@ module Bosh::Director
|
|
179
179
|
def add_release(release)
|
180
180
|
if @releases.has_key?(release.name)
|
181
181
|
raise DeploymentDuplicateReleaseName,
|
182
|
-
"Duplicate release name
|
182
|
+
"Duplicate release name '#{release.name}'"
|
183
183
|
end
|
184
184
|
@releases[release.name] = release
|
185
185
|
end
|
@@ -115,11 +115,11 @@ module Bosh
|
|
115
115
|
|
116
116
|
if template.link_infos.has_key?(current_job.name) && template.link_infos[current_job.name].has_key?('provides')
|
117
117
|
template.link_infos[current_job.name]['provides'].each do |link_name, provided_link|
|
118
|
-
if provided_link['
|
118
|
+
if provided_link['link_properties_exported']
|
119
119
|
## Get default values for this job
|
120
120
|
default_properties = get_default_properties(deployment, template)
|
121
121
|
|
122
|
-
provided_link['mapped_properties'] = process_link_properties(scoped_properties, default_properties, provided_link['
|
122
|
+
provided_link['mapped_properties'] = process_link_properties(scoped_properties, default_properties, provided_link['link_properties_exported'], errors)
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
@@ -168,52 +168,50 @@ module Bosh
|
|
168
168
|
|
169
169
|
def process_link_properties(scoped_properties, default_properties, link_property_list, errors)
|
170
170
|
mapped_properties = {}
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
use_defaults = true
|
182
|
-
else
|
183
|
-
current_property_in_loop = current_property_in_loop[key]
|
184
|
-
end
|
185
|
-
|
186
|
-
if !mapped_properties_in_loop.has_key?(key)
|
187
|
-
mapped_properties_in_loop[key] = {}
|
188
|
-
end
|
189
|
-
previous_property_in_loop = mapped_properties_in_loop
|
190
|
-
mapped_properties_in_loop = mapped_properties_in_loop[key]
|
191
|
-
end
|
192
|
-
|
193
|
-
if use_defaults
|
194
|
-
if default_properties.has_key?('properties') && default_properties['properties'].has_key?(link_property)
|
195
|
-
if default_properties['properties'][link_property].has_key?('default')
|
196
|
-
previous_property_in_loop[property_path.last()] = default_properties['properties'][link_property]['default']
|
171
|
+
link_property_list.each do |link_property|
|
172
|
+
property_path = link_property.split(".")
|
173
|
+
result = find_property(property_path, scoped_properties)
|
174
|
+
if !result['found']
|
175
|
+
if default_properties.has_key?('properties') && default_properties['properties'].has_key?(link_property)
|
176
|
+
if default_properties['properties'][link_property].has_key?('default')
|
177
|
+
mapped_properties = update_mapped_properties(mapped_properties, property_path, default_properties['properties'][link_property]['default'])
|
178
|
+
else
|
179
|
+
mapped_properties = update_mapped_properties(mapped_properties, property_path, nil)
|
180
|
+
end
|
197
181
|
else
|
198
|
-
e = Exception.new("Link property #{link_property} in template #{default_properties['template_name']}
|
182
|
+
e = Exception.new("Link property #{link_property} in template #{default_properties['template_name']} is not defined in release spec")
|
199
183
|
errors.push(e)
|
200
184
|
end
|
201
185
|
else
|
202
|
-
|
203
|
-
errors.push(e)
|
186
|
+
mapped_properties = update_mapped_properties(mapped_properties, property_path, result['value'])
|
204
187
|
end
|
188
|
+
end
|
189
|
+
return mapped_properties
|
190
|
+
end
|
191
|
+
|
192
|
+
def find_property(property_path, scoped_properties)
|
193
|
+
current_node = scoped_properties
|
194
|
+
property_path.each do |key|
|
195
|
+
if !current_node || !current_node.has_key?(key)
|
196
|
+
return {'found'=> false, 'value' => nil}
|
205
197
|
else
|
206
|
-
|
198
|
+
current_node = current_node[key]
|
207
199
|
end
|
200
|
+
end
|
201
|
+
return {'found'=> true,'value'=> current_node}
|
202
|
+
end
|
208
203
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
204
|
+
def update_mapped_properties(mapped_properties, property_path, value)
|
205
|
+
current_node = mapped_properties
|
206
|
+
property_path.each_with_index do |key, index|
|
207
|
+
if index == property_path.size - 1
|
208
|
+
current_node[key] = value
|
209
|
+
else
|
210
|
+
if !current_node.has_key?(key)
|
211
|
+
current_node[key] = {}
|
212
|
+
end
|
213
|
+
current_node = current_node[key]
|
214
|
+
end
|
217
215
|
end
|
218
216
|
return mapped_properties
|
219
217
|
end
|
@@ -35,11 +35,11 @@ module Bosh::Director
|
|
35
35
|
|
36
36
|
release = @manager.find_by_name(@name)
|
37
37
|
@model = @manager.find_version(release, @version)
|
38
|
-
@logger.debug("Found release
|
38
|
+
@logger.debug("Found release '#{@name}/#{@version}'")
|
39
39
|
|
40
40
|
unless @deployment_model.release_versions.include?(@model)
|
41
|
-
@logger.debug("Binding release
|
42
|
-
"to deployment
|
41
|
+
@logger.debug("Binding release '#{@name}/#{@version}' " +
|
42
|
+
"to deployment '#{@deployment_model.name}'")
|
43
43
|
@deployment_model.add_release_version(@model)
|
44
44
|
end
|
45
45
|
end
|
@@ -58,9 +58,9 @@ module Bosh::Director
|
|
58
58
|
# have been parsed, so we can assume @templates contains
|
59
59
|
# the list of templates that need to be bound
|
60
60
|
@templates.each_value do |template|
|
61
|
-
@logger.debug("Binding template
|
61
|
+
@logger.debug("Binding template '#{template.name}'")
|
62
62
|
template.bind_models
|
63
|
-
@logger.debug("Bound template
|
63
|
+
@logger.debug("Bound template '#{template.name}'")
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -21,7 +21,7 @@ module Bosh::Director
|
|
21
21
|
if runtime_manifest['release']
|
22
22
|
if runtime_manifest['releases']
|
23
23
|
raise RuntimeAmbiguousReleaseSpec,
|
24
|
-
"Runtime manifest contains both
|
24
|
+
"Runtime manifest contains both 'release' and 'releases' " +
|
25
25
|
'sections, please use one of the two.'
|
26
26
|
end
|
27
27
|
@release_specs << runtime_manifest['release']
|
@@ -34,16 +34,16 @@ module Bosh::Director
|
|
34
34
|
@release_specs.each do |release_spec|
|
35
35
|
if release_spec['version'] == 'latest'
|
36
36
|
raise RuntimeInvalidReleaseVersion,
|
37
|
-
"Runtime manifest contains the release
|
37
|
+
"Runtime manifest contains the release '#{release_spec['name']}' with version as 'latest'. " +
|
38
38
|
"Please specify the actual version string."
|
39
39
|
end
|
40
40
|
|
41
41
|
if @deployment
|
42
42
|
deployment_release = @deployment.release(release_spec["name"])
|
43
43
|
if deployment_release
|
44
|
-
if deployment_release.version != release_spec["version"]
|
45
|
-
raise RuntimeInvalidDeploymentRelease, "Runtime manifest specifies release
|
46
|
-
"This conflicts with version
|
44
|
+
if deployment_release.version != release_spec["version"].to_s
|
45
|
+
raise RuntimeInvalidDeploymentRelease, "Runtime manifest specifies release '#{release_spec["name"]}' with version as '#{release_spec["version"]}'. " +
|
46
|
+
"This conflicts with version '#{deployment_release.version}' specified in the deployment manifest."
|
47
47
|
else
|
48
48
|
next
|
49
49
|
end
|
@@ -64,10 +64,10 @@ module Bosh::Director
|
|
64
64
|
|
65
65
|
addon_jobs = safe_property(addon_spec, 'jobs', :class => Array, :default => [])
|
66
66
|
|
67
|
-
addon_jobs.each do |
|
68
|
-
if !@release_specs.find { |release_spec| release_spec['name'] ==
|
67
|
+
addon_jobs.each do |addon_job|
|
68
|
+
if !@release_specs.find { |release_spec| release_spec['name'] == addon_job['release'] }
|
69
69
|
raise RuntimeReleaseNotListedInReleases,
|
70
|
-
"Runtime manifest specifies job
|
70
|
+
"Runtime manifest specifies job '#{addon_job['name']}' which is defined in '#{addon_job['release']}', but '#{addon_job['release']}' is not listed in the releases section."
|
71
71
|
end
|
72
72
|
|
73
73
|
if @deployment
|
@@ -75,38 +75,42 @@ module Bosh::Director
|
|
75
75
|
deployment_release_ids = Models::Release.where(:name => valid_release_versions).map {|r| r.id}
|
76
76
|
deployment_jobs = @deployment.jobs
|
77
77
|
|
78
|
-
templates_from_model = Models::Template.where(:name =>
|
78
|
+
templates_from_model = Models::Template.where(:name => addon_job['name'], :release_id => deployment_release_ids)
|
79
79
|
if templates_from_model == nil
|
80
|
-
raise "Job '#{
|
80
|
+
raise "Job '#{addon_job['name']}' not found in Template table"
|
81
81
|
end
|
82
82
|
|
83
|
-
release = @deployment.release(
|
83
|
+
release = @deployment.release(addon_job['release'])
|
84
84
|
release.bind_model
|
85
85
|
|
86
|
-
template = DeploymentPlan::Template.new(release,
|
86
|
+
template = DeploymentPlan::Template.new(release, addon_job['name'])
|
87
87
|
|
88
88
|
deployment_jobs.each do |j|
|
89
89
|
templates_from_model.each do |template_from_model|
|
90
90
|
if template_from_model.consumes != nil
|
91
91
|
template_from_model.consumes.each do |consumes|
|
92
|
-
template.
|
92
|
+
template.add_link_from_release(j.name, 'consumes', consumes["name"], consumes)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
if template_from_model.provides != nil
|
96
96
|
template_from_model.provides.each do |provides|
|
97
|
-
template.
|
97
|
+
template.add_link_from_release(j.name, 'provides', provides["name"], provides)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
provides_links = safe_property(
|
102
|
+
provides_links = safe_property(addon_job, 'provides', class: Hash, optional: true)
|
103
103
|
provides_links.to_a.each do |link_name, source|
|
104
|
-
template.
|
104
|
+
template.add_link_from_manifest(j.name, "provides", link_name, source)
|
105
105
|
end
|
106
106
|
|
107
|
-
consumes_links = safe_property(
|
107
|
+
consumes_links = safe_property(addon_job, 'consumes', class: Hash, optional: true)
|
108
108
|
consumes_links.to_a.each do |link_name, source|
|
109
|
-
template.
|
109
|
+
template.add_link_from_manifest(j.name, 'consumes', link_name, source)
|
110
|
+
end
|
111
|
+
|
112
|
+
if addon_job.has_key?('properties')
|
113
|
+
template.add_template_scoped_properties(addon_job['properties'], j.name)
|
110
114
|
end
|
111
115
|
end
|
112
116
|
|
@@ -9,8 +9,8 @@ module Bosh::Director
|
|
9
9
|
|
10
10
|
attr_reader :compilations_performed
|
11
11
|
|
12
|
-
def initialize(jobs_to_compile, compilation_config, compilation_instance_pool, logger,
|
13
|
-
@
|
12
|
+
def initialize(jobs_to_compile, compilation_config, compilation_instance_pool, logger, director_job)
|
13
|
+
@event_log_stage = nil
|
14
14
|
@logger = logger
|
15
15
|
@director_job = director_job
|
16
16
|
|
@@ -18,9 +18,6 @@ module Bosh::Director
|
|
18
18
|
@counter_mutex = Mutex.new
|
19
19
|
|
20
20
|
@compilation_instance_pool = compilation_instance_pool
|
21
|
-
|
22
|
-
@compile_task_generator = CompileTaskGenerator.new(@logger, @event_log)
|
23
|
-
|
24
21
|
@compile_tasks = {}
|
25
22
|
@ready_tasks = []
|
26
23
|
@compilations_performed = 0
|
@@ -34,7 +31,7 @@ module Bosh::Director
|
|
34
31
|
|
35
32
|
@compile_tasks.each_value do |task|
|
36
33
|
if task.ready_to_compile?
|
37
|
-
@logger.info("Package
|
34
|
+
@logger.info("Package '#{task.package.desc}' is ready to be compiled for stemcell '#{task.stemcell.desc}'")
|
38
35
|
@ready_tasks << task
|
39
36
|
end
|
40
37
|
end
|
@@ -61,7 +58,7 @@ module Bosh::Director
|
|
61
58
|
|
62
59
|
with_compile_lock(package.id, stemcell.id) do
|
63
60
|
# Check if the package was compiled in a parallel deployment
|
64
|
-
compiled_package = task.find_compiled_package(@logger, @
|
61
|
+
compiled_package = task.find_compiled_package(@logger, @event_log_stage)
|
65
62
|
if compiled_package.nil?
|
66
63
|
build = Models::CompiledPackage.generate_build_number(package, stemcell.model.operating_system, stemcell.model.version)
|
67
64
|
task_result = nil
|
@@ -124,9 +121,10 @@ module Bosh::Director
|
|
124
121
|
private
|
125
122
|
|
126
123
|
def prepare_tasks
|
127
|
-
@event_log.begin_stage('Preparing package compilation', 1)
|
124
|
+
@event_log_stage = Config.event_log.begin_stage('Preparing package compilation', 1)
|
125
|
+
@compile_task_generator = CompileTaskGenerator.new(@logger, @event_log_stage)
|
128
126
|
|
129
|
-
@
|
127
|
+
@event_log_stage.advance_and_track('Finding packages to compile') do
|
130
128
|
@jobs_to_compile.each do |job|
|
131
129
|
stemcell = job.stemcell
|
132
130
|
|
@@ -136,9 +134,9 @@ module Bosh::Director
|
|
136
134
|
# it's obscure which double is at fault
|
137
135
|
release_name = t.release.name
|
138
136
|
template_name = t.name
|
139
|
-
"
|
137
|
+
"'#{release_name}/#{template_name}'"
|
140
138
|
end
|
141
|
-
@logger.info("Job templates #{template_descs.join(', ')} need to run on stemcell
|
139
|
+
@logger.info("Job templates #{template_descs.join(', ')} need to run on stemcell '#{stemcell.desc}'")
|
142
140
|
|
143
141
|
job.templates.each do |template|
|
144
142
|
template.package_models.each do |package|
|
@@ -150,7 +148,7 @@ module Bosh::Director
|
|
150
148
|
end
|
151
149
|
|
152
150
|
def compile_packages
|
153
|
-
@event_log.begin_stage('Compiling packages', compilation_count)
|
151
|
+
@event_log_stage = Config.event_log.begin_stage('Compiling packages', compilation_count)
|
154
152
|
|
155
153
|
begin
|
156
154
|
ThreadPool.new(:max_threads => @compilation_config.workers).wrap do |pool|
|
@@ -182,10 +180,10 @@ module Bosh::Director
|
|
182
180
|
|
183
181
|
def enqueue_unblocked_tasks(task)
|
184
182
|
@tasks_mutex.synchronize do
|
185
|
-
@logger.info("Unblocking dependents of
|
183
|
+
@logger.info("Unblocking dependents of '#{task.package.desc}' for '#{task.stemcell.desc}'")
|
186
184
|
task.dependent_tasks.each do |dep_task|
|
187
185
|
if dep_task.ready_to_compile?
|
188
|
-
@logger.info("Package
|
186
|
+
@logger.info("Package '#{dep_task.package.desc}' now ready to be compiled for '#{dep_task.stemcell.desc}'")
|
189
187
|
@ready_tasks << dep_task
|
190
188
|
end
|
191
189
|
end
|
@@ -195,13 +193,13 @@ module Bosh::Director
|
|
195
193
|
def process_task(task)
|
196
194
|
package_desc = task.package.desc
|
197
195
|
stemcell_desc = task.stemcell.desc
|
198
|
-
task_desc = "package
|
196
|
+
task_desc = "package '#{package_desc}' for stemcell '#{stemcell_desc}'"
|
199
197
|
|
200
198
|
with_thread_name("compile_package(#{package_desc}, #{stemcell_desc})") do
|
201
199
|
if director_job_cancelled?
|
202
200
|
@logger.info("Cancelled compiling #{task_desc}")
|
203
201
|
else
|
204
|
-
@
|
202
|
+
@event_log_stage.advance_and_track(package_desc) do
|
205
203
|
@logger.info("Compiling #{task_desc}")
|
206
204
|
compile_package(task)
|
207
205
|
@logger.info("Finished compiling #{task_desc}")
|
@@ -2,17 +2,17 @@ module Bosh::Director
|
|
2
2
|
module DeploymentPlan
|
3
3
|
module Steps
|
4
4
|
class UpdateStep
|
5
|
-
def initialize(base_job,
|
5
|
+
def initialize(base_job, deployment_plan, multi_job_updater, cloud)
|
6
6
|
@base_job = base_job
|
7
7
|
@logger = base_job.logger
|
8
|
-
@event_log = event_log
|
9
8
|
@cloud = cloud
|
10
9
|
@deployment_plan = deployment_plan
|
11
10
|
@multi_job_updater = multi_job_updater
|
12
11
|
@vm_deleter = Bosh::Director::VmDeleter.new(@cloud, @logger)
|
13
12
|
@disk_manager = DiskManager.new(@cloud, @logger)
|
14
13
|
job_renderer = JobRenderer.create
|
15
|
-
|
14
|
+
arp_flusher = ArpFlusher.new
|
15
|
+
@vm_creator = Bosh::Director::VmCreator.new(@cloud, @logger, @vm_deleter, @disk_manager, job_renderer, arp_flusher)
|
16
16
|
end
|
17
17
|
|
18
18
|
def perform
|
@@ -36,7 +36,7 @@ module Bosh::Director
|
|
36
36
|
|
37
37
|
@logger.info('Creating missing VMs')
|
38
38
|
# TODO: something about instance_plans.select(&:new?) -- how does that compare to the isntance#has_vm? check?
|
39
|
-
@vm_creator.create_for_instance_plans(@deployment_plan.instance_plans_with_missing_vms, @deployment_plan.ip_provider
|
39
|
+
@vm_creator.create_for_instance_plans(@deployment_plan.instance_plans_with_missing_vms, @deployment_plan.ip_provider)
|
40
40
|
|
41
41
|
@base_job.task_checkpoint
|
42
42
|
end
|
@@ -56,7 +56,7 @@ module Bosh::Director
|
|
56
56
|
@logger.info('No unneeded instances to delete')
|
57
57
|
return
|
58
58
|
end
|
59
|
-
event_log_stage =
|
59
|
+
event_log_stage = Config.event_log.begin_stage('Deleting unneeded instances', unneeded_instances.size)
|
60
60
|
dns_manager = DnsManagerProvider.create
|
61
61
|
instance_deleter = InstanceDeleter.new(@deployment_plan.ip_provider, dns_manager, @disk_manager)
|
62
62
|
unneeded_instance_plans = unneeded_instances.map do |instance|
|
@@ -124,7 +124,7 @@ module Bosh::Director
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
def
|
127
|
+
def add_link_from_release(job_name, kind, link_name, source)
|
128
128
|
@link_infos[job_name] ||= {}
|
129
129
|
@link_infos[job_name][kind] ||= {}
|
130
130
|
@link_infos[job_name][kind][link_name] ||= {}
|
@@ -136,6 +136,37 @@ module Bosh::Director
|
|
136
136
|
@link_infos[job_name][kind][link_name]['skip_link'] = true
|
137
137
|
else
|
138
138
|
source.to_a.each do |key, value|
|
139
|
+
if key == "properties"
|
140
|
+
key = "link_properties_exported"
|
141
|
+
end
|
142
|
+
@link_infos[job_name][kind][link_name][key] = value
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def add_link_from_manifest(job_name, kind, link_name, source)
|
148
|
+
@link_infos[job_name] ||= {}
|
149
|
+
@link_infos[job_name][kind] ||= {}
|
150
|
+
@link_infos[job_name][kind][link_name] ||= {}
|
151
|
+
|
152
|
+
if source.eql? 'nil'
|
153
|
+
# This is the case where the user set link source to nil explicitly in the deployment manifest
|
154
|
+
# We should skip the binding of this link, even if it exist. This is used only when the link
|
155
|
+
# is optional
|
156
|
+
@link_infos[job_name][kind][link_name]['skip_link'] = true
|
157
|
+
else
|
158
|
+
errors = []
|
159
|
+
if kind == "consumes"
|
160
|
+
errors = validate_consume_link(source, link_name, job_name)
|
161
|
+
end
|
162
|
+
errors.concat(validate_link_def(source, link_name, job_name))
|
163
|
+
|
164
|
+
if errors.size > 0
|
165
|
+
raise errors.join("\n")
|
166
|
+
end
|
167
|
+
|
168
|
+
source_hash = source.to_a
|
169
|
+
source_hash.each do |key, value|
|
139
170
|
@link_infos[job_name][kind][link_name][key] = value
|
140
171
|
end
|
141
172
|
end
|
@@ -177,6 +208,35 @@ module Bosh::Director
|
|
177
208
|
|
178
209
|
private
|
179
210
|
|
211
|
+
def validate_consume_link(source, link_name, job_name)
|
212
|
+
blacklist = [ ['instances', 'from'], ['properties', 'from'] ]
|
213
|
+
errors = []
|
214
|
+
if source == nil
|
215
|
+
return errors
|
216
|
+
end
|
217
|
+
|
218
|
+
blacklist.each do |invalid_props|
|
219
|
+
if invalid_props.all? { |prop| source.has_key?(prop) }
|
220
|
+
errors.push("Cannot specify both '#{invalid_props[0]}' and '#{invalid_props[1]}' keys for link '#{link_name}' in job '#{@name}' in instance group '#{job_name}'.")
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
if source.has_key?('properties') && !source.has_key?('instances')
|
225
|
+
errors.push("Cannot specify 'properties' without 'instances' for link '#{link_name}' in job '#{@name}' in instance group '#{job_name}'.")
|
226
|
+
end
|
227
|
+
|
228
|
+
errors
|
229
|
+
end
|
230
|
+
|
231
|
+
def validate_link_def(source, link_name, job_name)
|
232
|
+
errors = []
|
233
|
+
if !source.nil? && (source.has_key?('name') || source.has_key?('type'))
|
234
|
+
errors.push("Cannot specify 'name' or 'type' properties in the manifest for link '#{link_name}' in job '#{@name}' in instance group '#{job_name}'. Please provide these keys in the release only.")
|
235
|
+
end
|
236
|
+
|
237
|
+
errors
|
238
|
+
end
|
239
|
+
|
180
240
|
# Returns model only if it's present, fails otherwise
|
181
241
|
# @return [Models::Template]
|
182
242
|
def present_model
|