add possibility to delete list of servers

This commit is contained in:
Anton Chuchkalov 2016-02-12 16:18:17 +03:00
parent adb8d1730a
commit b565052f6b
8 changed files with 71 additions and 3 deletions

View File

@ -49,7 +49,7 @@ module DevopsClient
if result.is_a?(Hash) if result.is_a?(Hash)
puts result["message"] puts result["message"]
else else
puts result puts result if result
end end
rescue OptionParser::InvalidOption => e rescue OptionParser::InvalidOption => e
puts e.message puts e.message

View File

@ -25,6 +25,8 @@ class Server < Handler
create_handler create_handler
when :delete when :delete
delete_handler delete_handler
when :delete_list
delete_list_handler
when :bootstrap when :bootstrap
bootstrap_handler bootstrap_handler
when :sync when :sync
@ -94,6 +96,18 @@ class Server < Handler
nil nil
end end
def delete_list_handler
abort "Please specify at least one server id" if @args.length < 3
server_ids = @args[2..-1]
if question(I18n.t("handler.server.question.delete_list", ids: server_ids.join(', ')))
servers_jobs = post("/server/delete_list", {servers_ids: server_ids})
servers_jobs.each do |server_id, job_id|
puts "Report for deleting #{server_id}: #{report_url(job_id)}"
end
end
nil
end
def show_handler def show_handler
r = inspect_parameters @options_parser.show_params, @args[2] r = inspect_parameters @options_parser.show_params, @args[2]
unless r.nil? unless r.nil?

View File

@ -2,7 +2,7 @@ require "devops-client/options/common_options"
class ServerOptions < CommonOptions class ServerOptions < CommonOptions
commands :add, :bootstrap, :create, :delete, :list, :pause, :reserve, :show, :unpause, :unreserve # :sync, commands :add, :bootstrap, :create, :delete, :list, :pause, :reserve, :show, :unpause, :unreserve, :delete_list
def initialize args, def_options def initialize args, def_options
super(args, def_options) super(args, def_options)
@ -161,4 +161,8 @@ class ServerOptions < CommonOptions
self.banner_header + " delete NODE_NAME [NODE_NAME ...]\n" self.banner_header + " delete NODE_NAME [NODE_NAME ...]\n"
end end
def delete_list_banner
self.banner_header + " delete_list INSTANCE_ID [INSTANCE_ID ...]\n"
end
end end

View File

@ -103,6 +103,7 @@ en:
server: server:
question: question:
delete: "Are you sure to delete server '%{name}'?" delete: "Are you sure to delete server '%{name}'?"
delete_list: "Are you sure to delete these servers: %{ids}?"
stack_template: stack_template:
create: create:
id: "Id: " id: "Id: "

View File

@ -55,6 +55,17 @@ module Devops
[jid] [jid]
end end
def delete_list
server_ids = parser.delete_list.uniq
servers = server_ids.map { |id| Devops::Db.connector.server_by_instance_id(id) }
current_user = parser.current_user
check_servers_list_auth(servers, current_user)
server_ids.inject({}) do |hash, server_id|
hash[server_id] = Worker.start_async(DeleteServerWorker, 'server_id' => server_id, 'current_user' => current_user)
hash
end
end
def create_server_stream out def create_server_stream out
status = [] status = []
prepare_create_server do |project, env, user, body| prepare_create_server do |project, env, user, body|
@ -329,6 +340,16 @@ module Devops
Devops::Db.connector.server_update(server) Devops::Db.connector.server_update(server)
end end
def check_servers_list_auth(servers, current_user)
project_with_env_pairs = servers.map do |server|
[server.project, server.deploy_env]
end
project_with_env_pairs.uniq.each do |pair|
project, env = *pair
Devops::Db.connector.check_project_auth project, env, current_user
end
end
end end
end end
end end

View File

@ -75,6 +75,11 @@ module Devops
rl rl
end end
def delete_list
@body ||= create_object_from_json_body
check_array(@body["servers_ids"], "Parameter 'servers_ids' should be a not empty array of string", String, false)
end
end end
end end
end end

View File

@ -14,7 +14,7 @@ module Devops
# - Content-Type: application/json # - Content-Type: application/json
# - body : # - body :
# { # {
# "names": [], -> array of servers names to run chef-client # "names": [], -> array of servers chef node names to run chef-client
# "tags": [], -> array of tags to apply on each server before running chef-client # "tags": [], -> array of tags to apply on each server before running chef-client
# "build_number": "", -> string, build number to deploy # "build_number": "", -> string, build number to deploy
# "run_list": [], -> array of strings to set run_list for chef-client # "run_list": [], -> array of strings to set run_list for chef-client

View File

@ -441,6 +441,29 @@ module Devops
create_response("Run list has been changed") create_response("Run list has been changed")
end end
# Delete list of servers
#
# * *Request*
# - method : POST
# - headers :
# - Accept: application/json
# - Content-Type: application/json
# - body :
# {
# "servers_ids": [ "server1", "server2"]
# }
#
# * *Returns* :
# {
# "server1": "report_1",
# "server2": "report_2"
# }
app.post_with_headers "/server/delete_list", :headers => [:accept, :content_type] do
check_privileges("server", "w")
json Devops::API2_0::Handler::Server.new(request).delete_list
end
puts "Server routes initialized" puts "Server routes initialized"
end end