add project metadata sync with chef on deploy

This commit is contained in:
Anton Chuchkalov 2016-07-22 17:00:05 +03:00
parent 6419cbfe73
commit a671083ae6
2 changed files with 37 additions and 1 deletions

View File

@ -359,6 +359,7 @@ module Devops
end
def deploy_server deploy_info
sync_project_metadata_with_chef!(deploy_info)
@out << "\nBefore deploy hooks...\n"
res = self.run_hook(:before_deploy, @out, deploy_info)
@out << "Done\n"
@ -498,6 +499,25 @@ module Devops
rlist.uniq
end
def sync_project_metadata_with_chef!(deploy_info)
version = deploy_info['project_info']['version']
deployers = deploy_info['project_info']['deployers']
api_cmd = %Q{
nodes.find(name: '#{@server.chef_node_name}') do |node|
node.set['project_info'] = {
'pinpromote' => {'version'=> '#{version}' },
'deployers' => #{deployers}
}
node.save
end
}
knife_cmd = %Q{exec -E "#{api_cmd}"}
puts_and_flush "Going to execute knife command:\n#{knife_cmd}"
output, succeeded = knife_instance.knife(knife_cmd)
puts_and_flush "Command output: #{output}"
raise 'Failed to sync project metadata with chef' unless succeeded
end
private
def schedule_expiration

View File

@ -501,9 +501,15 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
allow(executor).to receive(:run_hook).with(:before_deploy, any_args)
allow(executor).to receive(:run_hook).with(:after_deploy, any_args)
allow(stubbed_knife).to receive(:ssh_stream) { 'Chef Client finished'}
allow(stubbed_knife).to receive(:knife) { ['asd', true] }
allow(stubbed_connector).to receive(:key) { double('Key', path: 'path_to_key') }
allow(stubbed_connector).to receive(:server_update)
@deploy_info = {}
@deploy_info = {
'project_info' => {
'version' => 'v1',
'deployers' => %w(root user)
}
}
end
@ -513,6 +519,16 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
deploy_server
end
it 'syncs project metadata with chef' do
expect(executor).to receive(:sync_project_metadata_with_chef!)
deploy_server
end
it 'raises error if sync fails' do
allow(stubbed_knife).to receive(:knife) { ['asd', false] }
expect { deploy_server }.to raise_error(StandardError)
end
context 'when uses json file' do
before(:all) do
@tmp_files_at_start = Dir.entries(SpecSupport.tmp_dir)