2016-01-31 17:52:11 +03:00
|
|
|
require 'workers/stack_bootstrap/stack_servers_persister'
|
|
|
|
|
|
|
|
|
|
RSpec.describe StackServersPersister, stubbed_connector: true do
|
|
|
|
|
let(:out) { double(:out, puts: nil, flush: nil) }
|
|
|
|
|
let(:run_list) { ['role[asd]'] }
|
2016-03-09 17:21:46 +03:00
|
|
|
let(:stack) { build(:stack_ec2, deploy_env: 'foo', run_list: run_list) }
|
2016-01-31 17:52:11 +03:00
|
|
|
let(:project) { build(:project, id: 'name') }
|
|
|
|
|
let(:persister) { described_class.new(stack, out) }
|
|
|
|
|
let(:provider) { instance_double(Provider::Ec2, name: 'ec2') }
|
|
|
|
|
let(:server_info_hash) do
|
|
|
|
|
{
|
2016-03-11 13:04:55 +03:00
|
|
|
'id' => 'i-abcdef',
|
2016-01-31 17:52:11 +03:00
|
|
|
'name' => 'server_name',
|
|
|
|
|
'key_name' => 'key',
|
|
|
|
|
'private_ip' => '127.0.0.1',
|
|
|
|
|
'public_ip' => '127.0.0.2',
|
|
|
|
|
'tags' => {
|
2016-02-20 17:39:02 +03:00
|
|
|
'cid:priority' => '3',
|
|
|
|
|
'Name' => 'server1'
|
2016-01-31 17:52:11 +03:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
allow(stubbed_connector).to receive(:project) { project }
|
|
|
|
|
allow(stubbed_connector).to receive(:image) {
|
|
|
|
|
instance_double(Devops::Model::Image, remote_user: 'user')
|
|
|
|
|
}
|
|
|
|
|
allow(stubbed_connector).to receive(:server_insert)
|
|
|
|
|
allow(stack).to receive(:provider_instance) { provider }
|
|
|
|
|
allow(provider).to receive(:stack_servers) {[server_info_hash]}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#persist' do
|
|
|
|
|
it 'fetches stack servers info' do
|
|
|
|
|
expect(provider).to receive(:stack_servers).with(stack)
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "doesn't raise error if cid:priority tag is absent" do
|
|
|
|
|
server_info_hash['tags'].delete('cid:priority')
|
|
|
|
|
expect {persister.persist}.not_to raise_error
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'returns hash {priority_as_integer => array of Devops::Model::Server}' do
|
|
|
|
|
result = persister.persist
|
|
|
|
|
expect(result).to be_a(Hash)
|
|
|
|
|
expect(result[3]).to be_an_array_of(Devops::Model::Server).and have_size(1)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'takes id, key_name, private_ip and public_ip attrs from info hash' do
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
2016-03-11 13:04:55 +03:00
|
|
|
expect(server.id).to eq 'i-abcdef'
|
2016-01-31 17:52:11 +03:00
|
|
|
expect(server.key).to eq 'key'
|
|
|
|
|
expect(server.private_ip).to eq '127.0.0.1'
|
|
|
|
|
expect(server.public_ip).to eq '127.0.0.2'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'takes created_by, run_list and stack attrs from stack' do
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.created_by).to eq 'root'
|
|
|
|
|
expect(server.run_list).to eq run_list
|
|
|
|
|
expect(server.stack).to eq 'iamstack'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'takes remote_user from image user' do
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.remote_user).to eq 'user'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "takes deploy_env from project's deploy_env identifier" do
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.deploy_env).to eq 'foo'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "takes default provider's ssh key if info doesn't contain it" do
|
|
|
|
|
allow(provider).to receive(:ssh_key) { 'default_key' }
|
|
|
|
|
server_info_hash.delete('key_name')
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.key).to eq 'default_key'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "sets server's run list to empty array if stack's run_list is nil" do
|
|
|
|
|
stack.run_list = nil
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.run_list).to eq []
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
2016-03-11 13:04:55 +03:00
|
|
|
it 'build chef_node_name with default mask ":project-:env-:instanceid"' do
|
2016-01-31 17:52:11 +03:00
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
2016-03-11 13:04:55 +03:00
|
|
|
expect(server.chef_node_name).to eq 'name-foo-i-abcdef'
|
2016-01-31 17:52:11 +03:00
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "builds chef_node_name with custom mask if info['tags']['cid:node-name-mask'] exists" do
|
2016-03-02 16:00:20 +03:00
|
|
|
server_info_hash['tags']['cid:node-name-mask'] = ':project-:instancename-123'
|
2016-01-31 17:52:11 +03:00
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.chef_node_name).to eq 'name-server1-123'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
2016-03-02 16:00:20 +03:00
|
|
|
|
2016-03-09 17:21:46 +03:00
|
|
|
it "sets provider and provider account from stack" do
|
|
|
|
|
stack.provider_account = 'foo'
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.provider).to eq 'ec2'
|
|
|
|
|
expect(server.provider_account).to eq 'foo'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
|
2016-03-02 16:00:20 +03:00
|
|
|
describe 'incremented variables' do
|
|
|
|
|
it 'substitutes :increment-groupid: with incrementing numbers' do
|
|
|
|
|
allow(provider).to receive(:stack_servers) {[
|
|
|
|
|
{'id' => 'server1', 'tags' => {'cid:node-name-mask' => 'node-:increment-group1:-dev'}, 'key_name' => 'key'},
|
|
|
|
|
{'id' => 'server1', 'tags' => {'cid:node-name-mask' => 'node-:increment-group1:-dev'}, 'key_name' => 'key'}
|
|
|
|
|
]}
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.chef_node_name).to eq 'node-01-dev'
|
|
|
|
|
end.ordered
|
|
|
|
|
expect(stubbed_connector).to receive(:server_insert) do |server|
|
|
|
|
|
expect(server.chef_node_name).to eq 'node-02-dev'
|
|
|
|
|
end
|
|
|
|
|
persister.persist
|
|
|
|
|
end
|
|
|
|
|
end
|
2016-01-31 17:52:11 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|