replace $cfname variable
This commit is contained in:
parent
80ca2d7ad1
commit
ac896bc5ab
@ -1,45 +1,54 @@
|
||||
require 'workers/stack_bootstrap/chef_node_name_builder'
|
||||
RSpec.describe ChefNodeNameBuilder do
|
||||
# real response
|
||||
let(:server_info) do
|
||||
{
|
||||
'id' => 'server1',
|
||||
'name' => 'server_name',
|
||||
'key_name' => 'key',
|
||||
'private_ip' => '127.0.0.1',
|
||||
'public_ip' => '127.0.0.2',
|
||||
'tags' => {
|
||||
'cid:priority' => '3'
|
||||
"name"=>"stack-achuchkalov-aws-test-1455976199-master01",
|
||||
"id"=>"i-fac32c7e",
|
||||
"key_name"=>"achuchkalov",
|
||||
"private_ip"=>"172.31.11.30",
|
||||
"public_ip"=>"52.90.250.51",
|
||||
"tags" => {
|
||||
"Name"=>"master01",
|
||||
"aws:cloudformation:logical-id"=>"EC2Instance1",
|
||||
"aws:cloudformation:stack-name"=>"stack-achuchkalov-aws-test-1455976199",
|
||||
"StackTemplate"=>"1inst",
|
||||
"aws:cloudformation:stack-id" => "arn:aws:cloudformation:us-east-1:736558555923:stack/stack-achuchkalov-aws-test-1455976199/d5f3ca60-d7d8-11e5-9ba1-50d5cd24fac6",
|
||||
"cid:deployEnv"=>"test",
|
||||
"cid:project"=>"aws",
|
||||
"cid:user"=>"root",
|
||||
"cid:priority"=>0
|
||||
}
|
||||
}
|
||||
end
|
||||
let(:project) { build(:project, id: 'proj', with_deploy_env_identifiers: %w(dev)) }
|
||||
let(:env) { project.deploy_env('dev') }
|
||||
let(:name_builder) { described_class.new(server_info, project, env) }
|
||||
let(:build_name) { name_builder.build_node_name }
|
||||
let(:build_node_name) {
|
||||
described_class.new(server_info, project, env).build_node_name
|
||||
}
|
||||
|
||||
def set_mask(mask)
|
||||
server_info['tags']['cid:node-name-mask'] = mask
|
||||
end
|
||||
|
||||
describe '#build_node_name' do
|
||||
it 'uses default mask ("$project-$nodename-$env")' do
|
||||
expect(build_name).to eq 'proj-server1-dev'
|
||||
it 'uses default mask ("$project-$cfname-$env")' do
|
||||
expect(build_node_name).to eq 'proj-master01-dev'
|
||||
end
|
||||
|
||||
it 'substitutes project, env and nodename' do
|
||||
set_mask('$project/$env/$nodename')
|
||||
expect(build_name).to eq 'proj/dev/server1'
|
||||
it 'substitutes project, env, instanceid and cfname' do
|
||||
set_mask('$project/$env/$instanceid/$cfname')
|
||||
expect(build_node_name).to eq 'proj/dev/i-fac32c7e/master01'
|
||||
end
|
||||
|
||||
it 'substitutes $time' do
|
||||
set_mask('$nodename-$time')
|
||||
expect(build_name).to match /server1-\d+/
|
||||
set_mask('$project-$time')
|
||||
expect(build_node_name).to match /proj-\d+/
|
||||
end
|
||||
|
||||
it 'substitutes underscores to dashes' do
|
||||
server_info['id'] = 'server_1'
|
||||
expect(build_name).to match 'proj-server-1-dev'
|
||||
server_info['tags']['Name'] = 'server_1'
|
||||
expect(build_node_name).to match 'proj-server-1-dev'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@ -15,7 +15,8 @@ RSpec.describe StackServersPersister, stubbed_connector: true do
|
||||
'private_ip' => '127.0.0.1',
|
||||
'public_ip' => '127.0.0.2',
|
||||
'tags' => {
|
||||
'cid:priority' => '3'
|
||||
'cid:priority' => '3',
|
||||
'Name' => 'server1'
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -97,7 +98,7 @@ RSpec.describe StackServersPersister, stubbed_connector: true do
|
||||
persister.persist
|
||||
end
|
||||
|
||||
it 'build chef_node_name with default mask "$project-$nodename-$env"' do
|
||||
it 'build chef_node_name with default mask "$project-$cfname-$env"' do
|
||||
expect(stubbed_connector).to receive(:server_insert) do |server|
|
||||
expect(server.chef_node_name).to eq 'name-server1-foo'
|
||||
end
|
||||
@ -105,7 +106,7 @@ RSpec.describe StackServersPersister, stubbed_connector: true do
|
||||
end
|
||||
|
||||
it "builds chef_node_name with custom mask if info['tags']['cid:node-name-mask'] exists" do
|
||||
server_info_hash['tags']['cid:node-name-mask'] = '$project-$nodename-123'
|
||||
server_info_hash['tags']['cid:node-name-mask'] = '$project-$cfname-123'
|
||||
expect(stubbed_connector).to receive(:server_insert) do |server|
|
||||
expect(server.chef_node_name).to eq 'name-server1-123'
|
||||
end
|
||||
|
||||
@ -1,13 +1,16 @@
|
||||
class ChefNodeNameBuilder
|
||||
DEFAULT_MASK = '$project-$cfname-$env'
|
||||
|
||||
def initialize(server_info, project, env)
|
||||
@server_info, @project, @env = server_info, project, env
|
||||
@mask = server_info['tags']['cid:node-name-mask'] || '$project-$nodename-$env'
|
||||
@mask = (server_info['tags']['cid:node-name-mask'] || DEFAULT_MASK).dup
|
||||
end
|
||||
|
||||
def build_node_name
|
||||
@mask.gsub!('$project', @project.id)
|
||||
@mask.gsub!('$env', @env.identifier)
|
||||
@mask.gsub!('$nodename', @server_info['id'])
|
||||
@mask.gsub!('$instanceid', @server_info['id'])
|
||||
@mask.gsub!('$cfname', @server_info['tags']['Name'] || '')
|
||||
@mask.gsub!('$time', Time.now.to_i.to_s)
|
||||
@mask.gsub!('_', '-')
|
||||
@mask
|
||||
|
||||
Loading…
Reference in New Issue
Block a user