diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 7ff7fdc..0518211 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -2,6 +2,7 @@ require "lib/knife/knife_factory" require "workers/worker" require "workers/delete_server_worker" require "hooks" +require 'net/ssh' module Devops module Executor @@ -312,15 +313,26 @@ module Devops res = delete_from_chef_server(@server.chef_node_name) begin new_name = "/etc/chef.backup_#{Time.now.strftime("%d-%m-%Y_%H.%M.%S")}" -# r = `ssh -i #{cert_path} -q #{@server.remote_user}@#{@server.private_ip} rm -Rf /etc/chef` - cmd = "ssh -i #{cert_path} -q #{@server.remote_user}@#{@server.private_ip} \"/bin/sh -c 'if [[ -d /etc/chef ]]; then mv /etc/chef #{new_name}; else echo not found; fi'\"" - DevopsLogger.logger.info("Trying to run command '#{cmd}'") - r = `#{cmd}`.strip - if r == 'not found' - res[:server] = "Directory '/etc/chef' does not exists" - else - raise(r) unless $?.success? - res[:server] = "'/etc/chef' renamed to '#{new_name}'" + cmd = (@server.remote_user == 'root' ? "" : "sudo ") + cmd = cmd + "/bin/sh -c 'if [[ -d /etc/chef ]]; then mv /etc/chef #{new_name} && echo ok; else echo not found; fi'" + DevopsLogger.logger.info("SSH: trying to run command '#{cmd}'") + Net::SSH.start(@server.private_ip, @server.remote_user, :keys => [cert_path]) do |session| + session.open_channel do |channel| + channel.request_pty(:modes => { Net::SSH::Connection::Term::ECHO => 0 }) do |c, success| + raise "could not request pty" unless success + channel.exec cmd + channel.on_data do |c_, data| + if data == 'not found' + res[:server] = "Directory '/etc/chef' does not exists" + elsif data == 'ok' + res[:server] = "'/etc/chef' renamed to '#{new_name}'" + else + DevopsLogger.logger.error "Unexpected error: " + data + raise(data) + end + end + end + end end rescue => e DevopsLogger.logger.error "Unbootstrap error: " + e.message