Merge branch 'devops_3' of http://git.stu.neva.ru/cloudtechlab/devops-service into devops_3
This commit is contained in:
commit
356d6efcd9
@ -30,6 +30,10 @@ class Stack < Handler
|
||||
output
|
||||
when :deploy
|
||||
deploy_handler
|
||||
when :reserve
|
||||
reserve_handler
|
||||
when :unreserve
|
||||
unreserve_handler
|
||||
when :resources
|
||||
resources_handler
|
||||
if @args[3]
|
||||
@ -120,6 +124,18 @@ class Stack < Handler
|
||||
puts response.inspect
|
||||
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
|
||||
|
||||
def provider_stacks(provider)
|
||||
|
||||
@ -2,7 +2,7 @@ require "devops-client/options/common_options"
|
||||
|
||||
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
|
||||
super(args, def_options)
|
||||
@ -14,6 +14,7 @@ class StackOptions < CommonOptions
|
||||
self.sync_params = ["STACK"]
|
||||
self.resources_params = ["STACK"]
|
||||
self.deploy_params = ["STACK"]
|
||||
self.reserve_params = ["STACK"]
|
||||
end
|
||||
|
||||
def create_options
|
||||
|
||||
@ -172,6 +172,38 @@ module Devops
|
||||
[-10]
|
||||
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
|
||||
|
||||
@ -111,6 +111,42 @@ module Devops
|
||||
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 = {}
|
||||
# Add tags to stack instances
|
||||
#
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
require "wisper"
|
||||
require "lib/hash_ext"
|
||||
require "lib/nil_class_ext"
|
||||
require "lib/string_ext"
|
||||
|
||||
require_relative "devops-loader"
|
||||
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|
|
||||
@out = out
|
||||
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
||||
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
|
||||
|
||||
report = save_report(file, stack_attrs)
|
||||
|
||||
begin
|
||||
|
||||
Loading…
Reference in New Issue
Block a user