69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'workers/stack_bootstrap/chef_node_name_builder'
 | |
| RSpec.describe ChefNodeNameBuilder do
 | |
|   # real response
 | |
|   let(:server_info) do
 | |
|     {
 | |
|       "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(: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-$cfname-$env")' do
 | |
|       expect(build_node_name).to eq 'proj-master01-dev'
 | |
|     end
 | |
| 
 | |
|     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('$project-$time')
 | |
|       expect(build_node_name).to match /proj-\d+/
 | |
|     end
 | |
| 
 | |
|     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(':project-:time')
 | |
|       expect(build_node_name).to match /proj-\d+/
 | |
|     end
 | |
| 
 | |
|     it 'works with both colon and dollar variables' do
 | |
|       set_mask('$project/$env/:instanceid/:cfname')
 | |
|       expect(build_node_name).to eq 'proj/dev/i-fac32c7e/master01'
 | |
|     end
 | |
| 
 | |
|     it 'substitutes underscores to dashes' do
 | |
|       server_info['tags']['Name'] = 'server_1'
 | |
|       expect(build_node_name).to match 'proj-server-1-dev'
 | |
|     end
 | |
|   end
 | |
| end | 
