Skip to content

Commit 977d6b7

Browse files
committed
Perform renames, related to Bosh v1 -> v2 evolution
- Rename job_template(s) [Bosh v1] -> instance_job(s) [Bosh v2] - Rename spec [ambiguous] -> spec_object [clarified: related to ERB-templates] - Rename remove_unused_properties [double-negative] -> pick_job_properties [affirmative] - Rename hash [imprecise] -> renderers_hash [clarified contents] - Ensure that (job_name_from_manifest == instance_job.name) while we re-read the job manifest (though there is actually no reason to re-read it) - Reword "Cannot unpack job template" [incorrect] -> "Cannot unpack job blob" [correct] - Rename @name [imprecise] -> @job_name [precised] - Remove duplicate @template_name [Bosh v1] identical to @job_name [Bosh v2] - Rename template_name [Bosh v1] -> job_name [Bosh v2] - Rename template_spec_properties [incorrect] -> instance_group_properties [correct] - Rename instance_name [incorrect] -> instance_group_name [correct] - Rename acc [accessory?] -> accu [accumulator!] - Alias instance_plan.templates [Bosh v1] -> instance_jobs [Bosh v2] - Don't rename fields in the 'template' model (don't touch models) - Favor using spec['name'] over spec['job']['name'] (Bosh v1 naming) for obtaining the instance group name.
1 parent 6aa55e9 commit 977d6b7

File tree

13 files changed

+109
-108
lines changed

13 files changed

+109
-108
lines changed

src/bosh-director-core/lib/bosh/director/core/templates/job_instance_renderer.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ module Bosh::Director::Core::Templates
77
# @param [Array<DeploymentPlan::Job>] instance_jobs
88
# @param [JobTemplateLoader] job_template_loader
99
class JobInstanceRenderer
10-
def initialize(templates, job_template_loader)
11-
@templates = templates
10+
def initialize(instance_jobs, job_template_loader)
11+
@instance_jobs = instance_jobs
1212
@job_template_loader = job_template_loader
1313
end
1414

@@ -36,22 +36,22 @@ def initialize(templates, job_template_loader)
3636
# in the `spec` object exposed to ERB templates
3737
# @return [RenderedJobInstance] An object containing the rendering results
3838
# (when successful)
39-
def render(spec)
39+
def render(spec_object)
4040
errors = []
4141

42-
rendered_templates = @templates.map do |template|
43-
job_template_renderer = job_template_renderers[template.name]
42+
rendered_templates = @instance_jobs.map do |instance_job|
43+
job_template_renderer = job_template_renderers[instance_job.name]
4444

4545
begin
46-
job_template_renderer.render(spec)
46+
job_template_renderer.render(spec_object)
4747
rescue Exception => e
4848
errors.push e
4949
end
5050
end
5151

5252
if errors.length > 0
5353
combined_errors = errors.map{|error| error.message.strip }.join("\n")
54-
header = "- Unable to render jobs for instance group '#{spec['job']['name']}'. Errors are:"
54+
header = "- Unable to render jobs for instance group '#{spec_object['name']}'. Errors are:"
5555
message = Bosh::Director::FormatterHelper.new.prepend_header_and_indent_body(header, combined_errors.strip, {:indent_by => 2})
5656
raise message
5757
end
@@ -62,9 +62,9 @@ def render(spec)
6262
private
6363

6464
def job_template_renderers
65-
@job_template_renderers ||= @templates.reduce({}) do |hash, template|
66-
hash[template.name] = @job_template_loader.process(template)
67-
hash
65+
@job_template_renderers ||= @instance_jobs.reduce({}) do |renderers_hash, instance_job|
66+
renderers_hash[instance_job.name] = @job_template_loader.process(instance_job)
67+
renderers_hash
6868
end
6969
end
7070
end

src/bosh-director-core/lib/bosh/director/core/templates/job_template_loader.rb

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,28 @@ def initialize(logger, template_blob_cache, link_provider_intents, dns_encoder)
3333
# @param [DeploymentPlan::Job] instance_job The job whose templates
3434
# should be rendered
3535
# @return [JobTemplateRenderer] Object that can render the templates
36-
def process(job_template)
37-
template_dir = extract_template(job_template)
36+
def process(instance_job)
37+
template_dir = extract_template(instance_job)
3838
manifest = Psych.load_file(File.join(template_dir, 'job.MF'), aliases: true)
3939

4040
monit_erb_file = File.read(File.join(template_dir, 'monit'))
41-
monit_source_erb = SourceErb.new('monit', 'monit', monit_erb_file, job_template.name)
41+
monit_source_erb = SourceErb.new('monit', 'monit', monit_erb_file, instance_job.name)
4242

4343
source_erbs = []
4444

45-
template_name = manifest.fetch('name', {})
45+
job_name_from_manifest = manifest.fetch('name', {})
46+
if job_name_from_manifest != instance_job.name
47+
raise Bosh::Director::JobTemplateUnpackFailed,
48+
"Inconsistent name in extracted job.MF manifest " +
49+
"(exptected: '#{instance_job.name}', got: '#{job_name_from_manifest}')"
50+
end
4651

4752
manifest.fetch('templates', {}).each_pair do |src_name, dest_name|
4853
erb_file = File.read(File.join(template_dir, 'templates', src_name))
49-
source_erbs << SourceErb.new(src_name, dest_name, erb_file, job_template.name)
54+
source_erbs << SourceErb.new(src_name, dest_name, erb_file, instance_job.name)
5055
end
5156

52-
JobTemplateRenderer.new(job_template: job_template,
53-
template_name: template_name,
57+
JobTemplateRenderer.new(instance_job: instance_job,
5458
monit_erb: monit_source_erb,
5559
source_erbs: source_erbs,
5660
logger: @logger,
@@ -62,15 +66,15 @@ def process(job_template)
6266

6367
private
6468

65-
def extract_template(job_template)
66-
@logger.debug("Extracting job #{job_template.name}")
67-
cached_blob_path = @template_blob_cache.download_blob(job_template)
69+
def extract_template(instance_job)
70+
@logger.debug("Extracting job #{instance_job.name}")
71+
cached_blob_path = @template_blob_cache.download_blob(instance_job)
6872
template_dir = Dir.mktmpdir('template_dir')
6973

7074
output = `tar -C #{template_dir} -xzf #{cached_blob_path} 2>&1`
7175
if $?.exitstatus != 0
7276
raise Bosh::Director::JobTemplateUnpackFailed,
73-
"Cannot unpack '#{job_template.name}' job template, " +
77+
"Cannot unpack '#{instance_job.name}' job blob, " +
7478
"tar returned #{$?.exitstatus}, " +
7579
"tar output: #{output}"
7680
end

src/bosh-director-core/lib/bosh/director/core/templates/job_template_renderer.rb

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,15 @@ class JobTemplateRenderer
1111

1212
attr_reader :monit_erb, :source_erbs
1313

14-
def initialize(job_template:,
15-
template_name:,
14+
def initialize(instance_job:,
1615
monit_erb:,
1716
source_erbs:,
1817
logger:,
1918
link_provider_intents:,
2019
dns_encoder: nil)
21-
@links_provided = job_template.model.provides
22-
@name = job_template.name
23-
@release = job_template.release
24-
@template_name = template_name
20+
@links_provided = instance_job.model.provides
21+
@job_name = instance_job.name
22+
@release = instance_job.release
2523
@monit_erb = monit_erb
2624
@source_erbs = source_erbs
2725
@logger = logger
@@ -33,7 +31,7 @@ def render(spec)
3331
spec = Bosh::Common::DeepCopy.copy(spec)
3432

3533
if spec['properties_need_filtering']
36-
spec = remove_unused_properties(spec)
34+
spec = pick_job_properties(spec)
3735
end
3836

3937
spec = namespace_links_to_current_job(spec)
@@ -64,15 +62,15 @@ def render(spec)
6462

6563
if errors.length > 0
6664
combined_errors = errors.map{|error| "- #{error.message.strip}"}.join("\n")
67-
header = "- Unable to render templates for job '#{@name}'. Errors are:"
65+
header = "- Unable to render templates for job '#{@job_name}'. Errors are:"
6866
message = Bosh::Director::FormatterHelper.new.prepend_header_and_indent_body(header, combined_errors.strip, {:indent_by => 2})
6967

7068
raise message
7169
end
7270

7371
rendered_files << RenderedFileTemplate.new('.bosh/links.json', '.bosh/links.json', links_data(spec))
7472

75-
RenderedJobTemplate.new(@name, monit, rendered_files)
73+
RenderedJobTemplate.new(@job_name, monit, rendered_files)
7674
end
7775

7876
private
@@ -83,8 +81,8 @@ def namespace_links_to_current_job(spec)
8381
modified_spec = spec
8482

8583
if modified_spec.has_key?('links')
86-
if modified_spec['links'][@template_name]
87-
links_spec = modified_spec['links'][@template_name]
84+
if modified_spec['links'][@job_name]
85+
links_spec = modified_spec['links'][@job_name]
8886
modified_spec['links'] = links_spec
8987
else
9088
modified_spec['links'] = {}
@@ -93,15 +91,15 @@ def namespace_links_to_current_job(spec)
9391
modified_spec
9492
end
9593

96-
def remove_unused_properties(spec)
94+
def pick_job_properties(spec)
9795
return nil if spec.nil?
9896

9997
modified_spec = spec
10098

10199
if modified_spec.has_key?('properties')
102-
if modified_spec['properties'][@template_name]
103-
properties_template = modified_spec['properties'][@template_name]
104-
modified_spec['properties'] = properties_template
100+
if modified_spec['properties'][@job_name]
101+
job_properties = modified_spec['properties'][@job_name]
102+
modified_spec['properties'] = job_properties
105103
end
106104
end
107105

@@ -111,7 +109,7 @@ def remove_unused_properties(spec)
111109
def links_data(spec)
112110
provider_intents = @link_provider_intents.select do |provider_intent|
113111
provider_intent.link_provider.instance_group == spec['name'] &&
114-
provider_intent.link_provider.name == @name
112+
provider_intent.link_provider.name == @job_name
115113
end
116114

117115
data = provider_intents.map do |provider_intent|

src/bosh-director-core/lib/bosh/director/core/templates/source_erb.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ class SourceErb
77

88
attr_reader :src_name, :dest_name, :erb
99

10-
def initialize(src_name, dest_name, erb_contents, template_name)
10+
def initialize(src_name, dest_name, erb_contents, job_name)
1111
@src_name = src_name
1212
@dest_name = dest_name
1313
erb = ERB.new(erb_contents, trim_mode: "-")
14-
erb.filename = File.join(template_name, src_name)
14+
erb.filename = File.join(job_name, src_name)
1515
@erb = erb
1616
end
1717

src/bosh-director-core/spec/bosh/director/core/templates/job_instance_renderer_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ module Bosh::Director::Core::Templates
1010

1111
let(:spec) do
1212
{
13-
'job' => {
13+
'name' => 'fake-instance-group-name',
14+
'job' => { # <- here 'job' is the Bosh v1 term for 'instance group'
1415
'name' => 'fake-instance-group-name'
1516
}
1617
}

src/bosh-director-core/spec/bosh/director/core/templates/job_template_loader_spec.rb

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ module Bosh::Director::Core::Templates
7979

8080
it 'returns the jobs template erb objects' do
8181
tarball_path = create_job_tarball(
82-
'release-job-name',
82+
'fake-job-name-1',
8383
'monit file erb contents',
8484
tmp_file,
8585
{ 'test' => {
@@ -90,7 +90,7 @@ module Bosh::Director::Core::Templates
9090

9191
job = double('Bosh::Director::DeploymentPlan::Job',
9292
download_blob: tarball_path,
93-
name: 'plan-job-name',
93+
name: 'fake-job-name-1',
9494
blobstore_id: 'blob-id',
9595
release: release
9696
)
@@ -103,19 +103,18 @@ module Bosh::Director::Core::Templates
103103
'monit',
104104
'monit',
105105
'monit file erb contents',
106-
'plan-job-name',
106+
'fake-job-name-1',
107107
).and_return(monit_erb)
108108

109109
expect(SourceErb).to receive(:new).with(
110110
'test',
111111
'test_dst',
112112
'test contents',
113-
'plan-job-name'
113+
'fake-job-name-1'
114114
).and_return(job_template_erb)
115115

116116
expect(JobTemplateRenderer).to receive(:new).with(
117-
job_template: job,
118-
template_name: 'release-job-name',
117+
instance_job: job,
119118
monit_erb: monit_erb,
120119
source_erbs: [job_template_erb],
121120
logger: logger,
@@ -128,12 +127,12 @@ module Bosh::Director::Core::Templates
128127
end
129128

130129
it 'includes only monit erb object when no other templates exist' do
131-
tarball_path = create_job_tarball('release-job-no-templates', 'monit file erb contents', tmp_file, {})
130+
tarball_path = create_job_tarball('fake-job-name-2', 'monit file erb contents', tmp_file, {})
132131

133132
job = double(
134133
'Bosh::Director::DeploymentPlan::Job',
135134
download_blob: tarball_path,
136-
name: 'plan-job-name',
135+
name: 'fake-job-name-2',
137136
blobstore_id: 'blob-id',
138137
release: release,
139138
)
@@ -145,12 +144,11 @@ module Bosh::Director::Core::Templates
145144
'monit',
146145
'monit',
147146
'monit file erb contents',
148-
'plan-job-name',
147+
'fake-job-name-2',
149148
).and_return(monit_erb)
150149

151150
expect(JobTemplateRenderer).to receive(:new).with(
152-
job_template: job,
153-
template_name: 'release-job-no-templates',
151+
instance_job: job,
154152
monit_erb: monit_erb,
155153
source_erbs: [],
156154
logger: logger,
@@ -167,7 +165,7 @@ module Bosh::Director::Core::Templates
167165
manifest = <<~EOF
168166
---
169167
bogus_key: &empty_hash {}
170-
name: test
168+
name: test-job-name
171169
templates: *empty_hash
172170
packages: []
173171
EOF
@@ -178,7 +176,7 @@ module Bosh::Director::Core::Templates
178176

179177
job = double('Bosh::Director::DeploymentPlan::Job',
180178
download_blob: tmp_file.path,
181-
name: 'plan-job-name',
179+
name: 'test-job-name',
182180
blobstore_id: 'blob-id',
183181
release: release,
184182
model: double('Bosh::Director::Models::Template', provides: [])

0 commit comments

Comments
 (0)