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