bosh-director 1.5.0.pre.1365 → 1.5.0.pre.1374

Sign up to get free protection for your applications and to get access to all the features.
@@ -322,7 +322,7 @@ module Bosh::Director
322
322
  # @return [void]
323
323
  def bind_configuration
324
324
  @deployment_plan.jobs.each do |job|
325
- ConfigurationHasher.new(job).hash
325
+ JobRenderer.new(job).render_job_instances
326
326
  end
327
327
  end
328
328
 
@@ -59,12 +59,12 @@ module Bosh::Director
59
59
 
60
60
  # Expanding virtual states
61
61
  case @state
62
- when "recreate"
62
+ when 'recreate'
63
63
  @recreate = true
64
- @state = "started"
65
- when "restart"
64
+ @state = 'started'
65
+ when 'restart'
66
66
  @restart = true
67
- @state = "started"
67
+ @state = 'started'
68
68
  end
69
69
  end
70
70
 
@@ -76,7 +76,7 @@ module Bosh::Director
76
76
  # @return [void]
77
77
  def use_model(model)
78
78
  if @model
79
- raise DirectorError, "Instance model is already bound"
79
+ raise DirectorError, 'Instance model is already bound'
80
80
  end
81
81
  @model = model
82
82
  end
@@ -183,7 +183,7 @@ module Bosh::Director
183
183
  # @return [Integer] persistent disk size
184
184
  def disk_size
185
185
  if @model.nil?
186
- current_state["persistent_disk"].to_i
186
+ current_state['persistent_disk'].to_i
187
187
  elsif @model.persistent_disk
188
188
  @model.persistent_disk.size
189
189
  else
@@ -197,7 +197,7 @@ module Bosh::Director
197
197
  dns_record_info = {}
198
198
  network_settings.each do |network_name, network|
199
199
  name = dns_record_name(network_name)
200
- dns_record_info[name] = network["ip"]
200
+ dns_record_info[name] = network['ip']
201
201
  end
202
202
  dns_record_info
203
203
  end
@@ -205,20 +205,20 @@ module Bosh::Director
205
205
  ##
206
206
  # @return [String] dns record name
207
207
  def dns_record_name(network_name)
208
- [index, job.canonical_name, canonical(network_name), job.deployment.canonical_name, dns_domain_name].join(".")
208
+ [index, job.canonical_name, canonical(network_name), job.deployment.canonical_name, dns_domain_name].join('.')
209
209
  end
210
210
 
211
211
  ##
212
212
  # @return [Boolean] returns true if the persistent disk is attached to the
213
213
  # VM
214
214
  def disk_currently_attached?
215
- current_state["persistent_disk"].to_i > 0
215
+ current_state['persistent_disk'].to_i > 0
216
216
  end
217
217
 
218
218
  ##
219
219
  # @return [Boolean] returns true if the network configuration changed
220
220
  def networks_changed?
221
- network_settings != @current_state["networks"]
221
+ network_settings != @current_state['networks']
222
222
  end
223
223
 
224
224
  ##
@@ -229,7 +229,7 @@ module Bosh::Director
229
229
  return true
230
230
  end
231
231
 
232
- if @job.resource_pool.spec != @current_state["resource_pool"]
232
+ if @job.resource_pool.spec != @current_state['resource_pool']
233
233
  return true
234
234
  end
235
235
 
@@ -252,7 +252,7 @@ module Bosh::Director
252
252
  # @return [Boolean] returns true if the expected configuration hash
253
253
  # differs from the one provided by the VM
254
254
  def configuration_changed?
255
- configuration_hash != @current_state["configuration_hash"]
255
+ configuration_hash != @current_state['configuration_hash']
256
256
  end
257
257
 
258
258
  ##
@@ -260,11 +260,11 @@ module Bosh::Director
260
260
  # from the one provided by the VM
261
261
  def job_changed?
262
262
  job_spec = @job.spec
263
- if job_spec != @current_state["job"]
263
+ if job_spec != @current_state['job']
264
264
  # The agent job spec could be in legacy form. job_spec cannot be,
265
265
  # though, because we got it from the spec function in job.rb which
266
266
  # automatically makes it non-legacy.
267
- return job_spec != Job.convert_from_legacy_spec(@current_state["job"])
267
+ return job_spec != Job.convert_from_legacy_spec(@current_state['job'])
268
268
  end
269
269
  return false
270
270
  end
@@ -273,7 +273,7 @@ module Bosh::Director
273
273
  # @return [Boolean] returns true if the expected packaged of the running
274
274
  # instance differ from the ones provided by the VM
275
275
  def packages_changed?
276
- @job.package_spec != @current_state["packages"]
276
+ @job.package_spec != @current_state['packages']
277
277
  end
278
278
 
279
279
  ##
@@ -289,7 +289,7 @@ module Bosh::Director
289
289
  def dns_changed?
290
290
  if Config.dns_enabled?
291
291
  dns_record_info.any? do |name, ip|
292
- Models::Dns::Record.find(:name => name, :type => "A",
292
+ Models::Dns::Record.find(:name => name, :type => 'A',
293
293
  :content => ip).nil?
294
294
  end
295
295
  else
@@ -306,9 +306,9 @@ module Bosh::Director
306
306
  # @return [Boolean] returns true if the expected job state differs from
307
307
  # the one provided by the VM
308
308
  def state_changed?
309
- @state == "detached" ||
310
- @state == "started" && @current_state["job_state"] != "running" ||
311
- @state == "stopped" && @current_state["job_state"] == "running"
309
+ @state == 'detached' ||
310
+ @state == 'started' && @current_state['job_state'] != 'running' ||
311
+ @state == 'stopped' && @current_state['job_state'] == 'running'
312
312
  end
313
313
 
314
314
  ##
@@ -323,7 +323,7 @@ module Bosh::Director
323
323
  # differences
324
324
  def changes
325
325
  changes = Set.new
326
- unless @state == "detached" && @current_state.nil?
326
+ unless @state == 'detached' && @current_state.nil?
327
327
  changes << :restart if @restart
328
328
  changes << :resource_pool if resource_pool_changed?
329
329
  changes << :network if networks_changed?
@@ -344,21 +344,21 @@ module Bosh::Director
344
344
  # @return [Hash<String, Object>] instance spec
345
345
  def spec
346
346
  spec = {
347
- "deployment" => @job.deployment.name,
348
- "release" => job.release.spec,
349
- "job" => job.spec,
350
- "index" => index,
351
- "networks" => network_settings,
352
- "resource_pool" => job.resource_pool.spec,
353
- "packages" => job.package_spec,
354
- "persistent_disk" => job.persistent_disk,
355
- "configuration_hash" => configuration_hash,
356
- "properties" => job.properties,
357
- "dns_domain_name" => dns_domain_name
347
+ 'deployment' => @job.deployment.name,
348
+ 'release' => job.release.spec,
349
+ 'job' => job.spec,
350
+ 'index' => index,
351
+ 'networks' => network_settings,
352
+ 'resource_pool' => job.resource_pool.spec,
353
+ 'packages' => job.package_spec,
354
+ 'persistent_disk' => job.persistent_disk,
355
+ 'configuration_hash' => configuration_hash,
356
+ 'properties' => job.properties,
357
+ 'dns_domain_name' => dns_domain_name
358
358
  }
359
359
 
360
360
  if template_hashes
361
- spec["template_hashes"] = template_hashes
361
+ spec['template_hashes'] = template_hashes
362
362
  end
363
363
 
364
364
  spec
@@ -368,17 +368,17 @@ module Bosh::Director
368
368
  # @return [Models::Instance]
369
369
  def find_or_create_model
370
370
  if @job.deployment.model.nil?
371
- raise DirectorError, "Deployment model is not bound"
371
+ raise DirectorError, 'Deployment model is not bound'
372
372
  end
373
373
 
374
374
  conditions = {
375
- :deployment_id => @job.deployment.model.id,
376
- :job => @job.name,
377
- :index => @index
375
+ deployment_id: @job.deployment.model.id,
376
+ job: @job.name,
377
+ index: @index
378
378
  }
379
379
 
380
380
  Models::Instance.find_or_create(conditions) do |model|
381
- model.state = "started"
381
+ model.state = 'started'
382
382
  end
383
383
  end
384
384
 
@@ -10,7 +10,7 @@ module Bosh::Director
10
10
  job.templates.map do |template|
11
11
  job_template_renderer = job_template_renderers[template.name]
12
12
  job_template_renderer.render(job.name, instance)
13
- end.sort { |x, y| x.name <=> y.name }
13
+ end
14
14
  end
15
15
 
16
16
  private
@@ -0,0 +1,28 @@
1
+ require 'bosh/director/job_template_loader'
2
+ require 'bosh/director/job_instance_renderer'
3
+ require 'bosh/director/rendered_job_instance_hasher'
4
+ require 'bosh/director/rendered_templates_uploader'
5
+
6
+ module Bosh::Director
7
+ class JobRenderer
8
+ # @param [DeploymentPlan::Job]
9
+ def initialize(job)
10
+ @job = job
11
+ job_template_loader = JobTemplateLoader.new
12
+ @instance_renderer = JobInstanceRenderer.new(@job, job_template_loader)
13
+ end
14
+
15
+ def render_job_instances
16
+ @job.instances.each do |instance|
17
+ rendered_templates = @instance_renderer.render(instance)
18
+
19
+ uploader = RenderedTemplatesUploader.new
20
+ uploader.upload(rendered_templates)
21
+
22
+ hasher = RenderedJobInstanceHasher.new(rendered_templates)
23
+ instance.configuration_hash = hasher.configuration_hash
24
+ instance.template_hashes = hasher.template_hashes
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,8 @@
1
1
  require 'bosh/director/job_template_renderer'
2
2
 
3
3
  module Bosh::Director
4
+ SrcFileTemplate = Struct.new(:src_name, :dest_name, :erb_file)
5
+
4
6
  class JobTemplateLoader
5
7
  def process(job_template)
6
8
  template_dir = extract_template(job_template)
@@ -9,14 +11,12 @@ module Bosh::Director
9
11
  monit_template = erb(File.join(template_dir, 'monit'))
10
12
  monit_template.filename = File.join(job_template.name, 'monit')
11
13
 
12
- templates = {}
14
+ templates = []
13
15
 
14
- if manifest['templates']
15
- manifest['templates'].each_key do |template_name|
16
- template = erb(File.join(template_dir, 'templates', template_name))
17
- template.filename = File.join(job_template.name, template_name)
18
- templates[template_name] = template
19
- end
16
+ manifest.fetch('templates', {}).each_pair do |src_name, dest_name|
17
+ erb_file = erb(File.join(template_dir, 'templates', src_name))
18
+ erb_file.filename = File.join(job_template.name, src_name)
19
+ templates << SrcFileTemplate.new(src_name, dest_name, erb_file)
20
20
  end
21
21
 
22
22
  JobTemplateRenderer.new(job_template.name, monit_template, templates)
@@ -1,4 +1,7 @@
1
+ require 'bosh/director/rendered_job_template'
2
+
1
3
  module Bosh::Director
4
+ RenderedFileTemplate = Struct.new(:src_name, :dest_name, :contents)
2
5
  class JobTemplateRenderer
3
6
 
4
7
  attr_reader :monit_template, :templates
@@ -14,11 +17,13 @@ module Bosh::Director
14
17
  template_context = Bosh::Common::TemplateEvaluationContext.new(instance.spec)
15
18
 
16
19
  monit = render_erb(job_name, monit_template, template_context, instance.index)
17
- rendered_templates = {}
18
- templates.keys.sort.each do |src_name|
19
- rendered_templates[src_name] = render_erb(job_name, templates[src_name], template_context, instance.index)
20
+
21
+ rendered_templates = templates.map do |template_file|
22
+ file_contents = render_erb(job_name, template_file.erb_file, template_context, instance.index)
23
+ RenderedFileTemplate.new(template_file.src_name, template_file.dest_name, file_contents)
20
24
  end
21
- return RenderedJobTemplate.new(name, monit, rendered_templates)
25
+
26
+ RenderedJobTemplate.new(name, monit, rendered_templates)
22
27
  end
23
28
 
24
29
  private
@@ -32,7 +37,7 @@ module Bosh::Director
32
37
  rescue Exception => e
33
38
  @logger.debug(e.inspect)
34
39
  job_desc = "#{job_name}/#{index}"
35
- line_index = e.backtrace.index{ |l| l.include?(template.filename) }
40
+ line_index = e.backtrace.index { |l| l.include?(template.filename) }
36
41
  line = line_index ? e.backtrace[line_index] : '(unknown):(unknown)'
37
42
  template_name, line = line.split(':')
38
43
 
@@ -40,9 +45,8 @@ module Bosh::Director
40
45
  "for `#{job_desc}' (line #{line}: #{e})"
41
46
 
42
47
  @logger.debug("#{message}\n#{e.backtrace.join("\n")}")
48
+
43
49
  raise JobTemplateBindingFailed, "#{message}"
44
50
  end
45
51
  end
46
-
47
- RenderedJobTemplate = Struct.new(:name, :monit, :templates)
48
- end
52
+ end
@@ -0,0 +1,31 @@
1
+ module Bosh::Director
2
+ class RenderedJobInstanceHasher
3
+ def initialize(job_templates)
4
+ @job_templates = job_templates
5
+ end
6
+
7
+ def configuration_hash
8
+ instance_digest = Digest::SHA1.new
9
+ job_templates.sort { |x, y| x.name <=> y.name }.each do |rendered_job_template|
10
+ bound_templates = ''
11
+ bound_templates << rendered_job_template.monit
12
+
13
+ rendered_job_template.templates.sort { |x, y| x.src_name <=> y.src_name }.each do |template_file|
14
+ bound_templates << template_file.contents
15
+ instance_digest << bound_templates
16
+ end
17
+ end
18
+
19
+ instance_digest.hexdigest
20
+ end
21
+
22
+ def template_hashes
23
+ job_templates.reduce({}) do |h, rendered_job_template|
24
+ h.merge(rendered_job_template.name => rendered_job_template.template_hash)
25
+ end
26
+ end
27
+
28
+ private
29
+ attr_reader :job_templates
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ module Bosh::Director
2
+ class RenderedJobTemplate
3
+ attr_reader :name, :monit, :templates
4
+
5
+ def initialize(name, monit, templates)
6
+ @name = name
7
+ @monit = monit
8
+ @templates = templates
9
+ end
10
+
11
+ def template_hash
12
+ template_digest = Digest::SHA1.new
13
+ template_digest << monit
14
+ templates.sort { |x, y| x.src_name <=> y.src_name }.each do |template_file|
15
+ template_digest << template_file.contents
16
+ end
17
+
18
+ template_digest.hexdigest
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,6 @@
1
+ module Bosh::Director
2
+ class RenderedTemplatesUploader
3
+ def upload(rendered_templates)
4
+ end
5
+ end
6
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Bosh
4
4
  module Director
5
- VERSION = '1.5.0.pre.1365'
5
+ VERSION = '1.5.0.pre.1374'
6
6
  end
7
7
  end
data/lib/bosh/director.rb CHANGED
@@ -58,7 +58,7 @@ require 'bosh/director/blob_util'
58
58
  require 'bosh/director/agent_client'
59
59
  require 'cloud'
60
60
  require 'bosh/director/compile_task'
61
- require 'bosh/director/configuration_hasher'
61
+ require 'bosh/director/job_renderer'
62
62
  require 'bosh/director/cycle_helper'
63
63
  require 'bosh/director/encryption_helper'
64
64
  require 'bosh/director/vm_creator'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0.pre.1365
4
+ version: 1.5.0.pre.1374
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-19 00:00:00.000000000 Z
12
+ date: 2013-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.5.0.pre.1365
37
+ version: 1.5.0.pre.1374
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.5.0.pre.1365
45
+ version: 1.5.0.pre.1374
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.5.0.pre.1365
53
+ version: 1.5.0.pre.1374
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.5.0.pre.1365
61
+ version: 1.5.0.pre.1374
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh_common
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.5.0.pre.1365
69
+ version: 1.5.0.pre.1374
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.5.0.pre.1365
77
+ version: 1.5.0.pre.1374
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_cpi
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.5.0.pre.1365
85
+ version: 1.5.0.pre.1374
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.5.0.pre.1365
93
+ version: 1.5.0.pre.1374
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_openstack_cpi
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.5.0.pre.1365
101
+ version: 1.5.0.pre.1374
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.5.0.pre.1365
109
+ version: 1.5.0.pre.1374
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_aws_cpi
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.5.0.pre.1365
117
+ version: 1.5.0.pre.1374
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.5.0.pre.1365
125
+ version: 1.5.0.pre.1374
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_vsphere_cpi
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: 1.5.0.pre.1365
133
+ version: 1.5.0.pre.1374
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  requirements:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: 1.5.0.pre.1365
141
+ version: 1.5.0.pre.1374
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: eventmachine
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -396,7 +396,7 @@ dependencies:
396
396
  - !ruby/object:Gem::Version
397
397
  version: 0.4.9
398
398
  - !ruby/object:Gem::Dependency
399
- name: rspec
399
+ name: fakefs
400
400
  requirement: !ruby/object:Gem::Requirement
401
401
  none: false
402
402
  requirements:
@@ -412,7 +412,23 @@ dependencies:
412
412
  - !ruby/object:Gem::Version
413
413
  version: '0'
414
414
  - !ruby/object:Gem::Dependency
415
- name: rspec-fire
415
+ name: machinist
416
+ requirement: !ruby/object:Gem::Requirement
417
+ none: false
418
+ requirements:
419
+ - - ~>
420
+ - !ruby/object:Gem::Version
421
+ version: '1.0'
422
+ type: :development
423
+ prerelease: false
424
+ version_requirements: !ruby/object:Gem::Requirement
425
+ none: false
426
+ requirements:
427
+ - - ~>
428
+ - !ruby/object:Gem::Version
429
+ version: '1.0'
430
+ - !ruby/object:Gem::Dependency
431
+ name: rspec
416
432
  requirement: !ruby/object:Gem::Requirement
417
433
  none: false
418
434
  requirements:
@@ -428,24 +444,24 @@ dependencies:
428
444
  - !ruby/object:Gem::Version
429
445
  version: '0'
430
446
  - !ruby/object:Gem::Dependency
431
- name: machinist
447
+ name: rspec-fire
432
448
  requirement: !ruby/object:Gem::Requirement
433
449
  none: false
434
450
  requirements:
435
- - - ~>
451
+ - - ! '>='
436
452
  - !ruby/object:Gem::Version
437
- version: '1.0'
453
+ version: '0'
438
454
  type: :development
439
455
  prerelease: false
440
456
  version_requirements: !ruby/object:Gem::Requirement
441
457
  none: false
442
458
  requirements:
443
- - - ~>
459
+ - - ! '>='
444
460
  - !ruby/object:Gem::Version
445
- version: '1.0'
461
+ version: '0'
446
462
  description: ! 'BOSH Director
447
463
 
448
- a77e8c'
464
+ d50b1a'
449
465
  email: support@cloudfoundry.com
450
466
  executables:
451
467
  - bosh-director
@@ -535,7 +551,6 @@ files:
535
551
  - lib/bosh/director/compiled_package_manifest.rb
536
552
  - lib/bosh/director/compiled_packages_exporter.rb
537
553
  - lib/bosh/director/config.rb
538
- - lib/bosh/director/configuration_hasher.rb
539
554
  - lib/bosh/director/cycle_helper.rb
540
555
  - lib/bosh/director/db_backup.rb
541
556
  - lib/bosh/director/db_backup/adapter.rb
@@ -578,6 +593,7 @@ files:
578
593
  - lib/bosh/director/ip_util.rb
579
594
  - lib/bosh/director/job_instance_renderer.rb
580
595
  - lib/bosh/director/job_queue.rb
596
+ - lib/bosh/director/job_renderer.rb
581
597
  - lib/bosh/director/job_runner.rb
582
598
  - lib/bosh/director/job_template_loader.rb
583
599
  - lib/bosh/director/job_template_renderer.rb
@@ -642,6 +658,9 @@ files:
642
658
  - lib/bosh/director/problem_handlers/unresponsive_agent.rb
643
659
  - lib/bosh/director/problem_resolver.rb
644
660
  - lib/bosh/director/problem_scanner.rb
661
+ - lib/bosh/director/rendered_job_instance_hasher.rb
662
+ - lib/bosh/director/rendered_job_template.rb
663
+ - lib/bosh/director/rendered_templates_uploader.rb
645
664
  - lib/bosh/director/resource_pool_updater.rb
646
665
  - lib/bosh/director/scheduler.rb
647
666
  - lib/bosh/director/sequel.rb
@@ -1,44 +0,0 @@
1
- require 'bosh/director/job_template_loader'
2
- require 'bosh/director/job_instance_renderer'
3
-
4
- module Bosh::Director
5
- class ConfigurationHasher
6
- # @param [DeploymentPlan::Job]
7
- def initialize(job)
8
- @job = job
9
- end
10
-
11
- def hash
12
- job_template_loader = JobTemplateLoader.new
13
- job_instance_renderer = JobInstanceRenderer.new(@job, job_template_loader)
14
-
15
- @job.instances.each do |instance|
16
- rendered_job_templates = job_instance_renderer.render(instance)
17
- instance_digest, template_digests = render_digest(rendered_job_templates)
18
- instance.configuration_hash = instance_digest.hexdigest
19
- instance.template_hashes = template_digests
20
- end
21
- end
22
-
23
- private
24
-
25
- def render_digest(rendered_job_templates)
26
- instance_digest = Digest::SHA1.new
27
- template_digests = {}
28
- rendered_job_templates.each do |rendered_job_template|
29
- bound_templates = ''
30
- bound_templates << rendered_job_template.monit
31
-
32
- rendered_job_template.templates.keys.sort.each do |src_name|
33
- bound_templates << rendered_job_template.templates[src_name]
34
- instance_digest << bound_templates
35
-
36
- template_digest = Digest::SHA1.new
37
- template_digest << bound_templates
38
- template_digests[rendered_job_template.name] = template_digest.hexdigest
39
- end
40
- end
41
- return instance_digest, template_digests
42
- end
43
- end
44
- end