#750: add reserve and unreserve commands for stack
This commit is contained in:
parent
762572553c
commit
cdeecb02e4
@ -30,6 +30,10 @@ class Stack < Handler
|
|||||||
output
|
output
|
||||||
when :deploy
|
when :deploy
|
||||||
deploy_handler
|
deploy_handler
|
||||||
|
when :reserve
|
||||||
|
reserve_handler
|
||||||
|
when :unreserve
|
||||||
|
unreserve_handler
|
||||||
when :resources
|
when :resources
|
||||||
resources_handler
|
resources_handler
|
||||||
if @args[3]
|
if @args[3]
|
||||||
@ -120,6 +124,18 @@ class Stack < Handler
|
|||||||
puts response.inspect
|
puts response.inspect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reserve_handler
|
||||||
|
stack_id = @args[2]
|
||||||
|
response = post "/stack/#{stack_id}/reserve"
|
||||||
|
puts response.inspect
|
||||||
|
end
|
||||||
|
|
||||||
|
def unreserve_handler
|
||||||
|
stack_id = @args[2]
|
||||||
|
response = post "/stack/#{stack_id}/unreserve"
|
||||||
|
puts response.inspect
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def provider_stacks(provider)
|
def provider_stacks(provider)
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require "devops-client/options/common_options"
|
|||||||
|
|
||||||
class StackOptions < CommonOptions
|
class StackOptions < CommonOptions
|
||||||
|
|
||||||
commands :create, :delete, :list, :show, :sync, :resources, :deploy
|
commands :create, :delete, :list, :show, :sync, :resources, :deploy, :reserve, :unreserve
|
||||||
|
|
||||||
def initialize args, def_options
|
def initialize args, def_options
|
||||||
super(args, def_options)
|
super(args, def_options)
|
||||||
@ -14,6 +14,7 @@ class StackOptions < CommonOptions
|
|||||||
self.sync_params = ["STACK"]
|
self.sync_params = ["STACK"]
|
||||||
self.resources_params = ["STACK"]
|
self.resources_params = ["STACK"]
|
||||||
self.deploy_params = ["STACK"]
|
self.deploy_params = ["STACK"]
|
||||||
|
self.reserve_params = ["STACK"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_options
|
def create_options
|
||||||
|
|||||||
@ -172,6 +172,38 @@ module Devops
|
|||||||
[-10]
|
[-10]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reserve_servers(stack_id)
|
||||||
|
stack = self.stack(stack_id)
|
||||||
|
user = parser.current_user
|
||||||
|
Devops::Db.connector.check_project_auth stack.project, stack.deploy_env, user
|
||||||
|
|
||||||
|
# check if none of servers are reserved by somebody else
|
||||||
|
servers = Devops::Db.connector.stack_servers(stack_id)
|
||||||
|
servers.each do |server|
|
||||||
|
if server.reserved_by.present? && server.reserved_by != user
|
||||||
|
raise ConflictException.new("Server '#{server.chef_node_name}' already reserved by #{server.reserved_by}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# reserve them
|
||||||
|
servers.each do |server|
|
||||||
|
server.reserved_by = user
|
||||||
|
Devops::Db.connector.server_update(server)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def unreserve_servers(stack_id)
|
||||||
|
stack = self.stack(stack_id)
|
||||||
|
user = parser.current_user
|
||||||
|
Devops::Db.connector.check_project_auth stack.project, stack.deploy_env, user
|
||||||
|
|
||||||
|
servers = Devops::Db.connector.stack_servers(stack_id)
|
||||||
|
servers.each do |server|
|
||||||
|
server.reserved_by = nil
|
||||||
|
Devops::Db.connector.server_update(server)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -111,6 +111,42 @@ module Devops
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# Reserve stack instances
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : POST
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
#
|
||||||
|
# * *Returns* :
|
||||||
|
# 200 - OK
|
||||||
|
app.post_with_headers "/stack/:id/reserve", :headers => [:accept, :content_type] do |id|
|
||||||
|
check_privileges("stack", "r")
|
||||||
|
check_privileges("server", "w")
|
||||||
|
Devops::API2_0::Handler::Stack.new(request).reserve_servers(id)
|
||||||
|
create_response("Servers of stack '#{id}' has been reserved")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Unreserve stack instances
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : POST
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
#
|
||||||
|
# * *Returns* :
|
||||||
|
# 200 - OK
|
||||||
|
app.post_with_headers "/stack/:id/unreserve", :headers => [:accept, :content_type] do |id|
|
||||||
|
check_privileges("stack", "r")
|
||||||
|
check_privileges("server", "w")
|
||||||
|
Devops::API2_0::Handler::Stack.new(request).unreserve_servers(id)
|
||||||
|
create_response("Servers of stack '#{id}' has been unreserved")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
hash = {}
|
hash = {}
|
||||||
# Add tags to stack instances
|
# Add tags to stack instances
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
require "wisper"
|
require "wisper"
|
||||||
require "lib/hash_ext"
|
require "lib/hash_ext"
|
||||||
|
require "lib/nil_class_ext"
|
||||||
|
require "lib/string_ext"
|
||||||
|
|
||||||
require_relative "devops-loader"
|
require_relative "devops-loader"
|
||||||
require_relative "devops-application"
|
require_relative "devops-application"
|
||||||
|
|||||||
9
devops-service/lib/nil_class_ext.rb
Normal file
9
devops-service/lib/nil_class_ext.rb
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class NilClass
|
||||||
|
def blank?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def present?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
9
devops-service/lib/string_ext.rb
Normal file
9
devops-service/lib/string_ext.rb
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class String
|
||||||
|
def present?
|
||||||
|
!empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def blank?
|
||||||
|
empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -18,6 +18,8 @@ class StackBootstrapWorker < Worker
|
|||||||
call(provider_name) do |provider, out, file|
|
call(provider_name) do |provider, out, file|
|
||||||
@out = out
|
@out = out
|
||||||
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
||||||
|
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
|
||||||
|
|
||||||
report = save_report(file, stack_attrs)
|
report = save_report(file, stack_attrs)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user