#839: unbootstrap command

This commit is contained in:
amartynov 2015-10-22 13:56:16 +03:00
parent dfe171abfe
commit cda1d937c4
3 changed files with 37 additions and 4 deletions

View File

@ -186,6 +186,13 @@ module Devops
return s, rl || d.run_list, t return s, rl || d.run_list, t
end 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 def add_server
body = parser.add_server body = parser.add_server
project = body["project"] project = body["project"]

View File

@ -279,6 +279,25 @@ module Devops
end end
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 # Add external server to devops
# #
# * *Request* # * *Request*

View File

@ -281,17 +281,24 @@ module Devops
k = Devops::Db.connector.key(@server.key) k = Devops::Db.connector.key(@server.key)
cert_path = k.path cert_path = k.path
i = 0 i = 0
begin res = begin
r = `ssh -i #{cert_path} -q #{@server.remote_user}@#{@server.private_ip} rm -Rf /etc/chef` 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? raise(r) unless $?.success?
r = delete_from_chef_server(@server.chef_node_name)
r[:server] = "'/etc/chef' renamed to '#{new_name}'"
r
rescue => e rescue => e
DevopsLogger.logger.error "Unbootstrap error: " + e.message DevopsLogger.logger.error "Unbootstrap error: " + e.message
i += 1 i += 1
sleep(1) sleep(1)
retry unless i == 5 retry unless i == 5
return e.message return {error: e.message}
end end
nil res
end end
def deploy_server_with_tags tags, deploy_info def deploy_server_with_tags tags, deploy_info