add possibility to delete list of servers
This commit is contained in:
parent
adb8d1730a
commit
b565052f6b
@ -49,7 +49,7 @@ module DevopsClient
|
||||
if result.is_a?(Hash)
|
||||
puts result["message"]
|
||||
else
|
||||
puts result
|
||||
puts result if result
|
||||
end
|
||||
rescue OptionParser::InvalidOption => e
|
||||
puts e.message
|
||||
|
||||
@ -25,6 +25,8 @@ class Server < Handler
|
||||
create_handler
|
||||
when :delete
|
||||
delete_handler
|
||||
when :delete_list
|
||||
delete_list_handler
|
||||
when :bootstrap
|
||||
bootstrap_handler
|
||||
when :sync
|
||||
@ -94,6 +96,18 @@ class Server < Handler
|
||||
nil
|
||||
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
|
||||
r = inspect_parameters @options_parser.show_params, @args[2]
|
||||
unless r.nil?
|
||||
|
||||
@ -2,7 +2,7 @@ require "devops-client/options/common_options"
|
||||
|
||||
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
|
||||
super(args, def_options)
|
||||
@ -161,4 +161,8 @@ class ServerOptions < CommonOptions
|
||||
self.banner_header + " delete NODE_NAME [NODE_NAME ...]\n"
|
||||
end
|
||||
|
||||
def delete_list_banner
|
||||
self.banner_header + " delete_list INSTANCE_ID [INSTANCE_ID ...]\n"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -103,6 +103,7 @@ en:
|
||||
server:
|
||||
question:
|
||||
delete: "Are you sure to delete server '%{name}'?"
|
||||
delete_list: "Are you sure to delete these servers: %{ids}?"
|
||||
stack_template:
|
||||
create:
|
||||
id: "Id: "
|
||||
|
||||
@ -55,6 +55,17 @@ module Devops
|
||||
[jid]
|
||||
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
|
||||
status = []
|
||||
prepare_create_server do |project, env, user, body|
|
||||
@ -329,6 +340,16 @@ module Devops
|
||||
Devops::Db.connector.server_update(server)
|
||||
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
|
||||
|
||||
@ -75,6 +75,11 @@ module Devops
|
||||
rl
|
||||
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
|
||||
|
||||
@ -14,7 +14,7 @@ module Devops
|
||||
# - Content-Type: application/json
|
||||
# - 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
|
||||
# "build_number": "", -> string, build number to deploy
|
||||
# "run_list": [], -> array of strings to set run_list for chef-client
|
||||
|
||||
@ -441,6 +441,29 @@ module Devops
|
||||
create_response("Run list has been changed")
|
||||
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"
|
||||
end
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user