Merge branch 'cid-394-deploy_delete_list_of_servers' into features

This commit is contained in:
Anton Chuchkalov 2016-02-12 17:37:11 +03:00
commit 1b2ac2d4b8
10 changed files with 80 additions and 4 deletions

View File

@ -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

View File

@ -20,6 +20,7 @@ class DeployEnvEc2 < DeployEnv
set_image(o)
vpc_id = set_subnets(o)
set_groups(o, vpc_id)
set_chef_env(o)
end
end
@ -48,4 +49,10 @@ class DeployEnvEc2 < DeployEnv
end
end
def set_chef_env(d)
set_parameter d, :chef_env do
enter_parameter('Chef environment: ')
end
end
end

View File

@ -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?

View File

@ -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

View File

@ -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: "

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -7,7 +7,8 @@ module Validators
def valid?
provider = ::Provider::ProviderFactory.get(@model.provider, @model.provider_account)
vpcs = provider.describe_vpcs
vpcs.keys.include?(@value)
ids = vpcs.map{|v| v["vpc_id"]}
ids.include?(@value)
rescue
raise "Invalid provider account '#{@model.provider_account}'"
end