diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index a1902bd..d2bb3e8 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -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 diff --git a/devops-service/spec/executors/server_executor_spec.rb b/devops-service/spec/executors/server_executor_spec.rb index 8447642..6e04fa0 100644 --- a/devops-service/spec/executors/server_executor_spec.rb +++ b/devops-service/spec/executors/server_executor_spec.rb @@ -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)