From cda1d937c4e2f908dd20dca3e99d88a172212e13 Mon Sep 17 00:00:00 2001 From: amartynov Date: Thu, 22 Oct 2015 13:56:16 +0300 Subject: [PATCH 1/5] #839: unbootstrap command --- devops-service/app/api2/handlers/server.rb | 7 +++++++ devops-service/app/api2/routes/server.rb | 19 +++++++++++++++++++ .../lib/executors/server_executor.rb | 15 +++++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index a43ec4b..18b2e35 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -186,6 +186,13 @@ module Devops return s, rl || d.run_list, t end + def unbootstrap_server id + s = get_server_by_key(id, parser.instance_key) + ### Authorization + Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user + Devops::Executor::ServerExecutor.new(s, "").unbootstrap + end + def add_server body = parser.add_server project = body["project"] diff --git a/devops-service/app/api2/routes/server.rb b/devops-service/app/api2/routes/server.rb index d50ba0e..09906f4 100644 --- a/devops-service/app/api2/routes/server.rb +++ b/devops-service/app/api2/routes/server.rb @@ -279,6 +279,25 @@ module Devops end end + # Unbootstrap devops server + # + # * *Request* + # - method : POST + # - headers : + # - Accept: application/json + # - Content-Type: application/json + # - body : + # { + # "key": "instance", -> search server by instance_id rather then chef_node_name + # } + # + # * *Returns* : 200 + app.post_with_headers "/server/:id/unbootstrap", :headers => [:accept, :content_type] do |id| + check_privileges("server", "w") + info = Devops::API2_0::Handler::Server.new(request).unbootstrap_server(id) + create_response("Unbootstrap", info) + end + # Add external server to devops # # * *Request* diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 7c502c9..17189fe 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -281,17 +281,24 @@ module Devops k = Devops::Db.connector.key(@server.key) cert_path = k.path i = 0 - begin - r = `ssh -i #{cert_path} -q #{@server.remote_user}@#{@server.private_ip} rm -Rf /etc/chef` + res = 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} mv /etc/chef #{new_name}" + DevopsLogger.logger.info("Trying to run command '#{cmd}'") + r = `#{cmd}` raise(r) unless $?.success? + r = delete_from_chef_server(@server.chef_node_name) + r[:server] = "'/etc/chef' renamed to '#{new_name}'" + r rescue => e DevopsLogger.logger.error "Unbootstrap error: " + e.message i += 1 sleep(1) retry unless i == 5 - return e.message + return {error: e.message} end - nil + res end def deploy_server_with_tags tags, deploy_info From 5aa65021b46e65a08bd42a0aca1101dfb0966903 Mon Sep 17 00:00:00 2001 From: amartynov Date: Thu, 22 Oct 2015 15:39:27 +0300 Subject: [PATCH 2/5] #839: check if /etc/chef exists --- devops-service/lib/executors/server_executor.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 17189fe..abbb1ce 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -281,16 +281,19 @@ module Devops k = Devops::Db.connector.key(@server.key) cert_path = k.path i = 0 - res = begin + 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} mv /etc/chef #{new_name}" + cmd = "ssh -i #{cert_path} -q #{@server.remote_user}@#{@server.private_ip} 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}` - raise(r) unless $?.success? - r = delete_from_chef_server(@server.chef_node_name) - r[:server] = "'/etc/chef' renamed to '#{new_name}'" - r + 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}'" + end rescue => e DevopsLogger.logger.error "Unbootstrap error: " + e.message i += 1 From 057fd8804a5bedcb0b459fcd9b4c076c22ca8bca Mon Sep 17 00:00:00 2001 From: amartynov Date: Thu, 22 Oct 2015 15:53:27 +0300 Subject: [PATCH 3/5] #839: fixed ssh command --- devops-service/lib/executors/server_executor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index abbb1ce..7a68c4b 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -285,7 +285,7 @@ module Devops 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} if [[ -d /etc/chef ]]; then mv /etc/chef #{new_name}; else echo 'not found'; fi" + 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}` if r == 'not found' From 0a5d37fa4f0294fead860efe0431842dabb8a154 Mon Sep 17 00:00:00 2001 From: amartynov Date: Thu, 22 Oct 2015 16:23:01 +0300 Subject: [PATCH 4/5] #839: fixed --- devops-service/lib/executors/server_executor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 7a68c4b..929ff58 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -285,7 +285,7 @@ module Devops 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'" + 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}` if r == 'not found' From 9574b710b22e1a016e6f9d94c47e654255ff81bb Mon Sep 17 00:00:00 2001 From: amartynov Date: Thu, 22 Oct 2015 16:52:31 +0300 Subject: [PATCH 5/5] #839: strip cmd output --- devops-service/lib/executors/server_executor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 929ff58..1b9e604 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -287,7 +287,7 @@ module Devops # 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}` + r = `#{cmd}`.strip if r == 'not found' res[:server] = "Directory '/etc/chef' does not exists" else