Skip to content

Commit e7bad82

Browse files
author
Joseph Palermo
authored
Merge pull request #2603 from DennisAhausSAP/extend-bosh-tagging
Extend bosh tagging for cpi
2 parents dd8673e + 0c8323d commit e7bad82

4 files changed

Lines changed: 69 additions & 11 deletions

File tree

src/bosh-director/lib/bosh/director/jobs/update_stemcell.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ def perform
109109
upload_suffix = ' (already exists, skipped)' unless needs_upload
110110
track_and_log("Uploading stemcell #{@name}/#{@version} to the cloud#{cpi_suffix}#{upload_suffix}") do
111111
if needs_upload
112-
stemcell.cid = cloud.create_stemcell(@stemcell_image, @cloud_properties)
112+
tags = get_tags()
113+
stemcell.cid = cloud.create_stemcell(@stemcell_image, @cloud_properties, {"tags" => tags})
113114
logger.info("Cloud created stemcell#{cpi_suffix}: #{stemcell.cid}")
114115
else
115116
logger.info("Skipping stemcell upload, already exists#{cpi_suffix}")
@@ -146,6 +147,21 @@ def perform
146147

147148
private
148149

150+
def get_tags()
151+
tags = {}
152+
runtime_configs = Bosh::Director::Api::RuntimeConfigManager.new.list(1, "default")
153+
if !runtime_configs.nil?
154+
raw = runtime_configs[0]
155+
if !raw.nil?
156+
hash = raw.to_hash
157+
if !hash.nil? && !hash["tags"].nil?
158+
tags.merge!(hash["tags"])
159+
end
160+
end
161+
end
162+
return tags
163+
end
164+
149165
def verify_sha1
150166
@multi_digest_verifier.verify(@stemcell_path, @stemcell_sha1)
151167
rescue Bosh::Director::BoshDigest::ShaMismatchError => e

src/bosh-director/lib/clouds/external_cpi_response_wrapper.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ def initialize(cpi, cpi_api_version)
99
end
1010

1111
def current_vm_id(*arguments); invoke_cpi_method(__method__.to_s, *arguments); end
12-
def create_stemcell(*arguments); invoke_cpi_method(__method__.to_s, *arguments); end
1312
def delete_stemcell(*arguments); invoke_cpi_method(__method__.to_s, *arguments); end
1413
def delete_vm(*arguments); invoke_cpi_method(__method__.to_s, *arguments); end
1514
def create_network(*arguments); invoke_cpi_method(__method__.to_s, *arguments); end
@@ -50,6 +49,16 @@ def create_vm(*args)
5049
response
5150
end
5251

52+
53+
def create_stemcell(*args)
54+
final_args = args.take(2)
55+
if @cpi_api_version >= 3
56+
final_args = args
57+
end
58+
return @cpi.create_stemcell(*final_args)
59+
end
60+
61+
5362
def attach_disk(*args)
5463
cpi_response = @cpi.attach_disk(*args)
5564

src/bosh-director/spec/unit/bosh/director/jobs/update_stemcell_spec.rb

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,28 @@
4444
tar.add_file('stemcell.MF', mode: '0644', mtime: 0) { |os, _| os.write(manifest.to_yaml) }
4545
tar.add_file('image', mode: '0644', mtime: 0) { |os, _| os.write(stemcell_image_content) }
4646
end
47-
4847
io.close
4948
end.string
5049
),
5150
)
5251
end
5352
end
5453

54+
55+
let(:runtime_config_manager) { instance_double(Bosh::Director::Api::RuntimeConfigManager) }
56+
let(:config) { instance_double(Bosh::Director::Models::Config) }
57+
let(:runtime_config_list) do
58+
[config]
59+
end
60+
5561
before do
62+
63+
allow(Bosh::Director::Api::RuntimeConfigManager).to receive(:new).and_return(runtime_config_manager)
64+
allow(Bosh::Director::Models::Config).to receive(:new).and_return(config)
65+
allow(config).to receive(:to_hash).and_return({"tags" => {"any"=> "value"}})
66+
allow(runtime_config_manager).to receive(:list).with(1, 'default').and_return(runtime_config_list)
67+
68+
5669
allow(Bosh::Director::Config).to receive(:event_log).and_return(event_log)
5770
allow(Bosh::Director::Config).to receive(:uuid).and_return('meow-uuid')
5871
allow(Bosh::Director::Config).to receive(:cloud_options).and_return({'provider' => {'path' => '/path/to/default/cpi'}})
@@ -61,6 +74,7 @@
6174
'meow-uuid',
6275
instance_of(Logging::Logger),
6376
stemcell_api_version: nil).and_return(cloud)
77+
6478
allow(cloud).to receive(:request_cpi_api_version=)
6579
allow(cloud).to receive(:info).and_return('stemcell_formats' => ['dummy'])
6680

@@ -319,9 +333,9 @@
319333
expect(cloud3).to receive(:info).and_return('stemcell_formats' => ['dummy'])
320334

321335
expect(cloud_factory).to receive(:all_names).exactly(3).times.and_return(%w[cloud1 cloud2 cloud3])
322-
expect(cloud_factory).to receive(:get).with('cloud1').and_return(cloud1)
323-
expect(cloud_factory).to receive(:get).with('cloud2').and_return(cloud2)
324-
expect(cloud_factory).to receive(:get).with('cloud3').and_return(cloud3)
336+
expect(cloud_factory).to receive(:get).with('cloud1').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud1, 1))
337+
expect(cloud_factory).to receive(:get).with('cloud2').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud2, 1))
338+
expect(cloud_factory).to receive(:get).with('cloud3').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud3, 1))
325339

326340
expected_steps = 11
327341
expect(event_log).to receive(:begin_stage).with('Update stemcell', expected_steps)
@@ -369,7 +383,7 @@
369383
it 'skips creating a stemcell match when a CPI fails' do
370384
expect(cloud1).to receive(:create_stemcell).with(anything, { 'ram' => '2gb' }).and_raise('I am flaky')
371385
expect(cloud1).to receive(:info).and_return('stemcell_formats' => ['dummy'])
372-
expect(cloud_factory).to receive(:get).with('cloud1').and_return(cloud1)
386+
expect(cloud_factory).to receive(:get).with('cloud1').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud1, 1))
373387
expect(cloud_factory).to receive(:all_names).exactly(3).times.and_return(['cloud1'])
374388

375389
expect { subject.perform }.to raise_error 'I am flaky'
@@ -385,9 +399,9 @@
385399

386400
it 'creates one stemcell and one stemcell match per cpi' do
387401
expect(cloud_factory).to receive(:all_names).exactly(3).times.and_return(%w[cloud1 cloud2 cloud3])
388-
expect(cloud_factory).to receive(:get).with('cloud1').and_return(cloud1)
389-
expect(cloud_factory).to receive(:get).with('cloud2').and_return(cloud2)
390-
expect(cloud_factory).to receive(:get).with('cloud3').and_return(cloud3)
402+
expect(cloud_factory).to receive(:get).with('cloud1').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud1, 1))
403+
expect(cloud_factory).to receive(:get).with('cloud2').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud2, 1))
404+
expect(cloud_factory).to receive(:get).with('cloud3').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud3, 1))
391405

392406
expect(cloud1).to receive(:info).and_return('stemcell_formats' => ['dummy'])
393407
expect(cloud2).to receive(:info).and_return('stemcell_formats' => ['dummy1'])
@@ -423,7 +437,7 @@
423437

424438
expect(cloud_factory).to receive(:get_cpi_aliases).with('').and_return([''])
425439
expect(cloud_factory).to receive(:all_names).exactly(3).times.and_return([''])
426-
expect(cloud_factory).to receive(:get).with('').and_return(cloud)
440+
expect(cloud_factory).to receive(:get).with('').and_return(Bosh::Clouds::ExternalCpiResponseWrapper.new(cloud, 1))
427441

428442
expected_steps = 5
429443
expect(event_log).to receive(:begin_stage).with('Update stemcell', expected_steps)

src/bosh-director/spec/unit/clouds/external_cpi_response_wrapper_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,25 @@ def self.it_raises_an_error_with_ok_to_retry(error_class)
358358
end
359359
end
360360

361+
describe 'when cpi_version is >= 3' do
362+
let(:cpi_api_version) { 3 }
363+
let(:config) { double('Bosh::Director::Config', logger: logger, cpi_task_log: cpi_log_path, preferred_cpi_api_version: 3) }
364+
365+
describe '#create_stemcell' do
366+
367+
let(:cpi_response) { JSON.dump(result: 'fake-result', error: nil, log: 'fake-log') }
368+
let(:expected_response) { 'fake-result' }
369+
370+
it_calls_cpi_method(
371+
:create_stemcell,
372+
'fake-stemcell-cid',
373+
{ 'cloud' => 'props' },
374+
{ 'tags' => {"any": "value"} }
375+
)
376+
377+
end
378+
end
379+
361380
describe 'when cpi_version is 2' do
362381
let(:cpi_api_version) { 2 }
363382

0 commit comments

Comments
 (0)