move servers deleting to background
This commit is contained in:
parent
8d01ff77b9
commit
775c9758ca
@ -87,10 +87,7 @@ class Server < Handler
|
|||||||
end
|
end
|
||||||
if question(I18n.t("handler.server.question.delete", :name => name))
|
if question(I18n.t("handler.server.question.delete", :name => name))
|
||||||
puts "Server '#{name}', deleting..."
|
puts "Server '#{name}', deleting..."
|
||||||
o = delete("/server/#{name}", options)
|
puts delete("/server/#{name}", options)
|
||||||
["server", "chef_node", "chef_client", "message"].each do |k|
|
|
||||||
puts o[k] unless o[k].nil?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
""
|
""
|
||||||
|
|||||||
@ -126,7 +126,7 @@ class ServerOptions < CommonOptions
|
|||||||
options[:groups] = groups.split(",")
|
options[:groups] = groups.split(",")
|
||||||
end
|
end
|
||||||
|
|
||||||
parser.recognize_option_value(:private_ip, 'server', short: '-N', i18n_scope: 'create')
|
parser.recognize_option_value(:private_ip, short: '-N', i18n_scope: 'create')
|
||||||
|
|
||||||
# it was disabled somewhy
|
# it was disabled somewhy
|
||||||
# parser.on('--public-ip', "Associate public IP with server") do
|
# parser.on('--public-ip', "Associate public IP with server") do
|
||||||
|
|||||||
@ -154,17 +154,13 @@ module Output
|
|||||||
def delete_servers_output
|
def delete_servers_output
|
||||||
output = ''
|
output = ''
|
||||||
|
|
||||||
if @data['deleted'].empty?
|
if @data['reports'].empty?
|
||||||
output << 'There are no deleted servers.'
|
output << 'There are no deleted servers.'
|
||||||
else
|
else
|
||||||
output << "Deleted servers:\n----\n"
|
output << "Reports for servers deleting:\n----\n"
|
||||||
output << @data['deleted'].join("\n")
|
output << @data['reports'].join("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
if !@data['failed'].empty?
|
|
||||||
output << "\nThere were errors during deleting these servers:\n----\n"
|
|
||||||
output << @data['failed'].join("\n")
|
|
||||||
end
|
|
||||||
output
|
output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ require "workers/project_test_worker"
|
|||||||
require "app/api2/parsers/project"
|
require "app/api2/parsers/project"
|
||||||
require "lib/project/type/types_factory"
|
require "lib/project/type/types_factory"
|
||||||
require "lib/executors/server_executor"
|
require "lib/executors/server_executor"
|
||||||
|
require "workers/delete_server_worker"
|
||||||
|
|
||||||
require_relative "../helpers/version_2.rb"
|
require_relative "../helpers/version_2.rb"
|
||||||
require_relative "request_handler"
|
require_relative "request_handler"
|
||||||
@ -314,16 +315,10 @@ module Devops
|
|||||||
private
|
private
|
||||||
|
|
||||||
def delete_chosen_servers!(servers)
|
def delete_chosen_servers!(servers)
|
||||||
deleted, failed = [], []
|
reports = servers.map do |server|
|
||||||
servers.each do |server|
|
Worker.start_async(DeleteServerWorker, 'server_id' => server.id)
|
||||||
begin
|
|
||||||
Devops::Executor::ServerExecutor.new(server, '').delete_server
|
|
||||||
deleted << server.id
|
|
||||||
rescue
|
|
||||||
failed << server.id
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
{deleted: deleted, failed: failed}
|
{reports: reports}
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,6 +10,7 @@ require "db/mongo/models/server"
|
|||||||
|
|
||||||
require "workers/create_server_worker"
|
require "workers/create_server_worker"
|
||||||
require "workers/bootstrap_worker"
|
require "workers/bootstrap_worker"
|
||||||
|
require "workers/delete_server_worker"
|
||||||
require "app/api2/parsers/server"
|
require "app/api2/parsers/server"
|
||||||
require_relative "request_handler"
|
require_relative "request_handler"
|
||||||
|
|
||||||
@ -47,10 +48,10 @@ module Devops
|
|||||||
end
|
end
|
||||||
|
|
||||||
def delete id
|
def delete id
|
||||||
s = get_server_by_key(id, parser.instance_key)
|
server = get_server_by_key(id, parser.instance_key)
|
||||||
### Authorization
|
Devops::Db.connector.check_project_auth server.project, server.deploy_env, parser.current_user
|
||||||
Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user
|
jid = Worker.start_async(DeleteServerWorker, 'server_id' => id)
|
||||||
Devops::Executor::ServerExecutor.new(s, "").delete_server
|
[jid]
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_server_stream out
|
def create_server_stream out
|
||||||
|
|||||||
@ -127,8 +127,7 @@ module Devops
|
|||||||
# 200 - Deleted
|
# 200 - Deleted
|
||||||
hash["DELETE"] = lambda {|id|
|
hash["DELETE"] = lambda {|id|
|
||||||
check_privileges("server", "w")
|
check_privileges("server", "w")
|
||||||
info, r = Devops::API2_0::Handler::Server.new(request).delete(id)
|
json Devops::API2_0::Handler::Server.new(request).delete(id)
|
||||||
create_response(info, r)
|
|
||||||
}
|
}
|
||||||
app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash
|
app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash
|
||||||
|
|
||||||
|
|||||||
@ -432,23 +432,25 @@ module Devops
|
|||||||
unbootstrap
|
unbootstrap
|
||||||
end
|
end
|
||||||
mongo.server_delete @server.id
|
mongo.server_delete @server.id
|
||||||
msg = "Static server '#{@server.id}' is removed"
|
puts_and_flush "Static server '#{@server.id}' is removed"
|
||||||
DevopsLogger.logger.info msg
|
return 0
|
||||||
return msg, nil
|
|
||||||
end
|
end
|
||||||
r = delete_from_chef_server(@server.chef_node_name)
|
|
||||||
|
puts_and_flush "Deleting from chef server:"
|
||||||
|
delete_from_chef_server(@server.chef_node_name).each do |key, result|
|
||||||
|
@out.puts "#{key} - #{result}"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts_and_flush "Deleting from cloud:"
|
||||||
provider = @server.provider_instance
|
provider = @server.provider_instance
|
||||||
begin
|
begin
|
||||||
r[:server] = provider.delete_server @server
|
puts_and_flush provider.delete_server @server
|
||||||
rescue Fog::Compute::OpenStack::NotFound, Fog::Compute::AWS::NotFound
|
rescue Fog::Compute::OpenStack::NotFound, Fog::Compute::AWS::NotFound
|
||||||
r[:server] = "Server with id '#{@server.id}' not found in '#{provider.name}' servers"
|
puts_and_flush "Server with id '#{@server.id}' not found among '#{provider.name}' servers"
|
||||||
DevopsLogger.logger.warn r[:server]
|
|
||||||
end
|
end
|
||||||
mongo.server_delete @server.id
|
mongo.server_delete @server.id
|
||||||
info = "Server '#{@server.id}' with name '#{@server.chef_node_name}' for project '#{@server.project}-#{@server.deploy_env}' is removed"
|
puts_and_flush "Server '#{@server.id}' with name '#{@server.chef_node_name}' for project '#{@server.project}-#{@server.deploy_env}' is removed."
|
||||||
DevopsLogger.logger.info info
|
0
|
||||||
r.each{|key, log| DevopsLogger.logger.info("#{key} - #{log}")}
|
|
||||||
return info, r
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def roll_back
|
def roll_back
|
||||||
@ -493,6 +495,11 @@ module Devops
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def puts_and_flush(message)
|
||||||
|
@out.puts message
|
||||||
|
@out.flush
|
||||||
|
end
|
||||||
|
|
||||||
def schedule_expiration
|
def schedule_expiration
|
||||||
if @deploy_env.expires
|
if @deploy_env.expires
|
||||||
@out << "Planning expiration in #{@deploy_env.expires}"
|
@out << "Planning expiration in #{@deploy_env.expires}"
|
||||||
|
|||||||
@ -660,9 +660,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
|
|||||||
delete_server
|
delete_server
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns message and nil' do
|
it 'returns 0' do
|
||||||
expect(delete_server.first).to be_a(String)
|
expect(delete_server).to eq 0
|
||||||
expect(delete_server.last).to be nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't try to remove it from cloud" do
|
it "doesn't try to remove it from cloud" do
|
||||||
@ -707,9 +706,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
|
|||||||
delete_server
|
delete_server
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns message and hash with :chef_node, :chef_client and :server keys' do
|
it 'returns 0' do
|
||||||
expect(delete_server.first).to be_a(String)
|
expect(delete_server).to eq 0
|
||||||
expect(delete_server.last).to be_a(Hash).and include(:chef_client, :chef_node, :server)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
39
devops-service/workers/delete_server_worker.rb
Normal file
39
devops-service/workers/delete_server_worker.rb
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
require "db/mongo/models/server"
|
||||||
|
require "db/mongo/models/report"
|
||||||
|
require "lib/executors/server_executor"
|
||||||
|
require "workers/worker"
|
||||||
|
require 'byebug'
|
||||||
|
|
||||||
|
class DeleteServerWorker < Worker
|
||||||
|
|
||||||
|
# options should contain 'server_id'
|
||||||
|
def perform(options)
|
||||||
|
server_id = options.fetch('server_id')
|
||||||
|
|
||||||
|
call() do |out, file|
|
||||||
|
out.puts "Deleting server with id #{server_id}" and out.flush
|
||||||
|
@server = mongo.server_by_instance_id(server_id)
|
||||||
|
report = save_report(file)
|
||||||
|
|
||||||
|
e = Devops::Executor::ServerExecutor.new(@server, out)
|
||||||
|
e.report = report
|
||||||
|
e.delete_server
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def save_report(file)
|
||||||
|
report = Devops::Model::Report.new(
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => 'SYSTEM',
|
||||||
|
"project" => @server.project,
|
||||||
|
"deploy_env" => @server.deploy_env,
|
||||||
|
"type" => Devops::Model::Report::DELETE_SERVER_TYPE
|
||||||
|
)
|
||||||
|
mongo.save_report(report)
|
||||||
|
report
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -5,6 +5,8 @@ require File.join(root, "deploy_worker")
|
|||||||
require File.join(root, "bootstrap_worker")
|
require File.join(root, "bootstrap_worker")
|
||||||
require File.join(root, "project_test_worker")
|
require File.join(root, "project_test_worker")
|
||||||
require File.join(root, "stack_bootstrap_worker")
|
require File.join(root, "stack_bootstrap_worker")
|
||||||
|
require File.join(root, "delete_server_worker")
|
||||||
|
require File.join(root, "delete_expired_server_worker")
|
||||||
|
|
||||||
config = {}
|
config = {}
|
||||||
#require File.join(root, "../proxy")
|
#require File.join(root, "../proxy")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user