server, stack, project run_list
This commit is contained in:
parent
168691340c
commit
9d7a2968dc
@ -95,14 +95,19 @@ module Devops
|
|||||||
"Users '#{users.join("', '")}' have been removed from '#{id}' project's authorized users"
|
"Users '#{users.join("', '")}' have been removed from '#{id}' project's authorized users"
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: multi project
|
def set_project_run_list id
|
||||||
|
list = parser.run_list
|
||||||
|
project = Devops::Db.connector.project(id)
|
||||||
|
Devops::Db.connector.set_project_run_list id, list
|
||||||
|
"Updated project with run_list '#{list.inspect}'"
|
||||||
|
end
|
||||||
|
|
||||||
def set_project_env_run_list id, deploy_env
|
def set_project_env_run_list id, deploy_env
|
||||||
list = parser.run_list
|
list = parser.run_list
|
||||||
project = Devops::Db.connector.project(id)
|
project = Devops::Db.connector.project(id)
|
||||||
env = project.deploy_env deploy_env
|
env = project.deploy_env deploy_env
|
||||||
env.run_list = list
|
Devops::Db.connector.set_project_env_run_list id, deploy_env, list
|
||||||
Devops::Db.connector.project_update project
|
"Updated environment '#{env.identifier}' with run_list '#{list.inspect}' in project '#{project.id}'"
|
||||||
"Updated environment '#{env.identifier}' with run_list '#{env.run_list.inspect}' in project '#{project.id}'"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_project id
|
def delete_project id
|
||||||
|
|||||||
@ -55,7 +55,7 @@ module Devops
|
|||||||
def create_server_stream out, body
|
def create_server_stream out, body
|
||||||
status = []
|
status = []
|
||||||
prepare_create_server(body).each do |s|
|
prepare_create_server(body).each do |s|
|
||||||
res = create_server_proc.call(out, s, provider, Devops::Db.connector)
|
res = create_server_proc.call(out, s, provider)
|
||||||
status.push res
|
status.push res
|
||||||
end
|
end
|
||||||
status
|
status
|
||||||
@ -253,6 +253,13 @@ module Devops
|
|||||||
yield s.id, provider
|
yield s.id, provider
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_run_list node_name
|
||||||
|
s = get_server_by_key(node_name, parser.instance_key)
|
||||||
|
user = parser.current_user
|
||||||
|
Devops::Db.connector.check_project_auth s.project, s.deploy_env, user
|
||||||
|
Devops::Db.connector.set_server_run_list(s.id, parser.run_list)
|
||||||
|
end
|
||||||
|
|
||||||
def get_server_by_key id, key
|
def get_server_by_key id, key
|
||||||
mongo = Devops::Db.connector
|
mongo = Devops::Db.connector
|
||||||
key == "instance" ? mongo.server_by_instance_id(id) : mongo.server_by_chef_node_name(id)
|
key == "instance" ? mongo.server_by_instance_id(id) : mongo.server_by_chef_node_name(id)
|
||||||
|
|||||||
@ -49,6 +49,10 @@ module Devops
|
|||||||
stack = Devops::Db.connector.stack(id)
|
stack = Devops::Db.connector.stack(id)
|
||||||
stack.resource(resource_id)
|
stack.resource(resource_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_run_list id
|
||||||
|
Devops::Db.connector.set_stack_run_list(id, parser.run_list)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -34,12 +34,14 @@ module Devops
|
|||||||
body = create_object_from_json_body
|
body = create_object_from_json_body
|
||||||
check_string(body["name"], "Parameter 'name' must be a not empty string")
|
check_string(body["name"], "Parameter 'name' must be a not empty string")
|
||||||
check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash)
|
check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash)
|
||||||
|
check_array(body["run_list"], "Parameter 'run_list' must be a not empty array of string", String, false, true)
|
||||||
Devops::Model::Project.new(body)
|
Devops::Model::Project.new(body)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
body = create_object_from_json_body
|
body = create_object_from_json_body
|
||||||
check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash)
|
check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash)
|
||||||
|
check_array(body["run_list"], "Parameter 'run_list' must be a not empty array of string", String, false, true)
|
||||||
Devops::Model::Project.new(body)
|
Devops::Model::Project.new(body)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -35,6 +35,8 @@ module Devops
|
|||||||
raise InvalidRecord.new("Parameter 'force' should be a null or true") unless force.nil? or force == true
|
raise InvalidRecord.new("Parameter 'force' should be a null or true") unless force.nil? or force == true
|
||||||
groups = check_array(@body["groups"], "Parameter 'groups' should be null or not empty array of string", String, true)
|
groups = check_array(@body["groups"], "Parameter 'groups' should be null or not empty array of string", String, true)
|
||||||
key_name = check_string(@body["key"], "Parameter 'key' should be null or not empty string", true)
|
key_name = check_string(@body["key"], "Parameter 'key' should be null or not empty string", true)
|
||||||
|
rl = check_array(@body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true, true)
|
||||||
|
Validators::Helpers::RunList.new(rl).validate! unless rl.nil?
|
||||||
@body
|
@body
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -43,10 +45,7 @@ module Devops
|
|||||||
id = check_string(@body["instance_id"], "Parameter 'instance_id' must be a not empty string")
|
id = check_string(@body["instance_id"], "Parameter 'instance_id' must be a not empty string")
|
||||||
name = check_string(@body["name"], "Parameter 'name' should be a not empty string", true)
|
name = check_string(@body["name"], "Parameter 'name' should be a not empty string", true)
|
||||||
rl = check_array(@body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true)
|
rl = check_array(@body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true)
|
||||||
unless rl.nil?
|
Validators::Helpers::RunList.new(rl).validate! unless rl.nil?
|
||||||
validator = Validators::Helpers::RunList.new(rl)
|
|
||||||
halt_response(validator.message) unless validator.valid?
|
|
||||||
end
|
|
||||||
t = check_string(@body["bootstrap_template"], "Parameter 'bootstrap_template' should be a not empty string", true)
|
t = check_string(@body["bootstrap_template"], "Parameter 'bootstrap_template' should be a not empty string", true)
|
||||||
@body
|
@body
|
||||||
end
|
end
|
||||||
@ -59,12 +58,21 @@ module Devops
|
|||||||
remote_user = check_string(@body["remote_user"], "Parameter 'remote_user' must be a not empty string")
|
remote_user = check_string(@body["remote_user"], "Parameter 'remote_user' must be a not empty string")
|
||||||
private_ip = check_string(@body["private_ip"], "Parameter 'private_ip' must be a not empty string")
|
private_ip = check_string(@body["private_ip"], "Parameter 'private_ip' must be a not empty string")
|
||||||
public_ip = check_string(@body["public_ip"], "Parameter 'public_ip' should be a not empty string", true)
|
public_ip = check_string(@body["public_ip"], "Parameter 'public_ip' should be a not empty string", true)
|
||||||
|
rl = check_array(@body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true, true)
|
||||||
|
Validators::Helpers::RunList.new(rl).validate! unless rl.nil?
|
||||||
@body
|
@body
|
||||||
end
|
end
|
||||||
|
|
||||||
def tags
|
def tags
|
||||||
@body ||= create_object_from_json_body
|
@body ||= create_object_from_json_body
|
||||||
@body["tags"]
|
check_param(@body["tags"], Hash, "Parameter 'tags' should be a hash", false, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def run_list
|
||||||
|
@body ||= create_object_from_json_body
|
||||||
|
rl = check_array(@body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, false, true)
|
||||||
|
Validators::Helpers::RunList.new(rl).validate!
|
||||||
|
rl
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,7 +6,16 @@ module Devops
|
|||||||
class StackParser < RequestParser
|
class StackParser < RequestParser
|
||||||
|
|
||||||
def create
|
def create
|
||||||
create_object_from_json_body
|
body = create_object_from_json_body
|
||||||
|
list = check_array(body["run_list"], "Body must contains not empty array of strings", String, true, true)
|
||||||
|
Validators::Helpers::RunList.new(list).validate! unless list.nil?
|
||||||
|
body
|
||||||
|
end
|
||||||
|
|
||||||
|
def run_list
|
||||||
|
list = check_array(create_object_from_json_body(Array), "Body must contains not empty array of strings")
|
||||||
|
Validators::Helpers::RunList.new(list).validate!
|
||||||
|
list
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -295,10 +295,10 @@ module Devops
|
|||||||
}
|
}
|
||||||
app.multi_routes "/project/:id/user", {}, users_hash
|
app.multi_routes "/project/:id/user", {}, users_hash
|
||||||
|
|
||||||
# Set run_list to project environment
|
# Set run_list to project
|
||||||
#
|
#
|
||||||
# * *Request*
|
# * *Request*
|
||||||
# - method : PUT
|
# - method : PATCH
|
||||||
# - headers :
|
# - headers :
|
||||||
# - Accept: application/json
|
# - Accept: application/json
|
||||||
# - Content-Type: application/json
|
# - Content-Type: application/json
|
||||||
@ -310,7 +310,28 @@ module Devops
|
|||||||
#
|
#
|
||||||
# * *Returns* :
|
# * *Returns* :
|
||||||
# 200 - Updated
|
# 200 - Updated
|
||||||
app.put_with_headers "/project/:id/:env/run_list", :headers => [:accept, :content_type] do |project, deploy_env|
|
app.patch_with_headers "/project/:id/run_list", :headers => [:accept, :content_type] do |project|
|
||||||
|
check_privileges("project", "w")
|
||||||
|
info = Devops::API2_0::Handler::Project.new(request).set_project_run_list(project)
|
||||||
|
create_response(info)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set run_list to project environment
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : PATCH
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
# - body :
|
||||||
|
# [
|
||||||
|
# "role[role_1]",
|
||||||
|
# "recipe[recipe_1]"
|
||||||
|
# ]
|
||||||
|
#
|
||||||
|
# * *Returns* :
|
||||||
|
# 200 - Updated
|
||||||
|
app.patch_with_headers "/project/:id/:env/run_list", :headers => [:accept, :content_type] do |project, deploy_env|
|
||||||
check_privileges("project", "w")
|
check_privileges("project", "w")
|
||||||
info = Devops::API2_0::Handler::Project.new(request).set_project_env_run_list(project, deploy_env)
|
info = Devops::API2_0::Handler::Project.new(request).set_project_env_run_list(project, deploy_env)
|
||||||
create_response(info)
|
create_response(info)
|
||||||
|
|||||||
@ -322,7 +322,7 @@ module Devops
|
|||||||
hash["PUT"] = lambda {|id|
|
hash["PUT"] = lambda {|id|
|
||||||
check_privileges("server", "w")
|
check_privileges("server", "w")
|
||||||
Devops::API2_0::Handler::Server.new(request).set_tags(id)
|
Devops::API2_0::Handler::Server.new(request).set_tags(id)
|
||||||
"Added"
|
create_response("Added")
|
||||||
}
|
}
|
||||||
|
|
||||||
# Delete devops server tags
|
# Delete devops server tags
|
||||||
@ -342,10 +342,34 @@ module Devops
|
|||||||
hash["DELETE"] = lambda {|id|
|
hash["DELETE"] = lambda {|id|
|
||||||
check_privileges("server", "w")
|
check_privileges("server", "w")
|
||||||
Devops::API2_0::Handler::Server.new(request).unset_tags(id)
|
Devops::API2_0::Handler::Server.new(request).unset_tags(id)
|
||||||
"Deleted"
|
create_response("Deleted")
|
||||||
}
|
}
|
||||||
app.multi_routes "/server/:id/tags", {:headers => [:content_type]}, hash
|
app.multi_routes "/server/:id/tags", {:headers => [:content_type]}, hash
|
||||||
|
|
||||||
|
# Set run_list to server
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : PATCH
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
# - body :
|
||||||
|
# {
|
||||||
|
# "run_list": [
|
||||||
|
# "role[role_1]",
|
||||||
|
# "recipe[recipe_1]"
|
||||||
|
# ],
|
||||||
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# * *Returns* :
|
||||||
|
# 200 - Updated
|
||||||
|
app.patch_with_headers "/server/:id/run_list", :headers => [:accept, :content_type] do |node_name|
|
||||||
|
check_privileges("server", "w")
|
||||||
|
Devops::API2_0::Handler::Server.new(request).set_server_run_list(node_name)
|
||||||
|
create_response("Run list has been changed")
|
||||||
|
end
|
||||||
|
|
||||||
puts "Server routes initialized"
|
puts "Server routes initialized"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -51,6 +51,28 @@ module Devops
|
|||||||
json Devops::API2_0::Handler::Stack.new(request).resource(stack_id, resource_id)
|
json Devops::API2_0::Handler::Stack.new(request).resource(stack_id, resource_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Set run_list to stack
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : PATCH
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
# - body :
|
||||||
|
# [
|
||||||
|
# "role[role_1]",
|
||||||
|
# "recipe[recipe_1]"
|
||||||
|
# ]
|
||||||
|
#
|
||||||
|
# * *Returns* :
|
||||||
|
# 200 - Updated
|
||||||
|
app.patch_with_headers "/stack/:id/run_list", :headers => [:accept, :content_type] do |id|
|
||||||
|
check_privileges("stack", "w")
|
||||||
|
info = Devops::API2_0::Handler::Stack.new(request).set_run_list(id)
|
||||||
|
create_response(info)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
puts "Stack routes initialized"
|
puts "Stack routes initialized"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -93,6 +93,16 @@ module Connectors
|
|||||||
project
|
project
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_project_env_run_list(project_id, env, run_list)
|
||||||
|
Helpers::RunList.new(run_list).validate!
|
||||||
|
@collection.update({"_id" => project_id, "deploy_envs.identifier" => env}, {"$set" => {"deploy_envs.$.run_list" => run_list}})
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_project_run_list(project_id, env, run_list)
|
||||||
|
Helpers::RunList.new(run_list).validate!
|
||||||
|
@collection.update({"_id" => project_id}, {"$set" => {run_list: run_list}})
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def list(query={}, query_options={})
|
def list(query={}, query_options={})
|
||||||
|
|||||||
@ -67,6 +67,10 @@ module Connectors
|
|||||||
collection.remove('stack' => stack_id)
|
collection.remove('stack' => stack_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_server_run_list(id, run_list)
|
||||||
|
@collection.update({"_id" => id}, {"$set" => {"run_list" => run_list}})
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def model_from_bson(bson)
|
def model_from_bson(bson)
|
||||||
|
|||||||
@ -14,6 +14,10 @@ module Connectors
|
|||||||
list(options)
|
list(options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_stack_run_list id, run_list
|
||||||
|
collection.update({"_id" => id}, {"$set" => {"run_list" => run_list}})
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def model_from_bson(bson)
|
def model_from_bson(bson)
|
||||||
|
|||||||
@ -1,14 +1,16 @@
|
|||||||
require "db/mongo/models/mongo_model"
|
require "db/mongo/models/mongo_model"
|
||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require "commands/deploy_env"
|
require "commands/deploy_env"
|
||||||
|
require "db/mongo/models/model_with_provider"
|
||||||
|
|
||||||
module Devops
|
module Devops
|
||||||
module Model
|
module Model
|
||||||
class DeployEnvBase < MongoModel
|
class DeployEnvBase < MongoModel
|
||||||
|
|
||||||
include DeployEnvCommands
|
include DeployEnvCommands
|
||||||
|
include ModelWithProvider
|
||||||
|
|
||||||
attr_accessor :identifier, :run_list, :expires, :provider, :users, :chef_env
|
attr_accessor :identifier, :run_list, :expires, :users, :chef_env
|
||||||
|
|
||||||
def initialize d={}
|
def initialize d={}
|
||||||
self.identifier = d["identifier"]
|
self.identifier = d["identifier"]
|
||||||
@ -30,15 +32,10 @@ module Devops
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def provider_instance
|
|
||||||
@provider_instance ||= ::Provider::ProviderFactory.get(self.provider)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_error_message(message)
|
def build_error_message(message)
|
||||||
"Deploy environment '#{self.identifier}'. " + message
|
"Deploy environment '#{self.identifier}'. " + message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# class methods
|
# class methods
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
|
|||||||
@ -119,7 +119,7 @@ module Devops
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.validators
|
def self.validators
|
||||||
@validators || []
|
@validators ||= []
|
||||||
end
|
end
|
||||||
|
|
||||||
# all exceptions are handled in @validate! method
|
# all exceptions are handled in @validate! method
|
||||||
|
|||||||
@ -18,14 +18,17 @@ module Devops
|
|||||||
define_hook :before_delete
|
define_hook :before_delete
|
||||||
define_hook :after_delete
|
define_hook :after_delete
|
||||||
|
|
||||||
attr_accessor :id, :deploy_envs, :type, :archived, :description
|
attr_accessor :id, :deploy_envs, :type, :archived, :description, :run_list
|
||||||
|
|
||||||
types :id => {:type => String, :empty => false},
|
types :id => {:type => String, :empty => false},
|
||||||
:deploy_envs => {:type => Array, :value_type => false, :empty => false},
|
:deploy_envs => {:type => Array, :value_type => false, :empty => false},
|
||||||
:description => {:type => String, :empty => true, :nil => true}
|
:description => {:type => String, :empty => true, :nil => true},
|
||||||
|
:run_list => {:type => Array, :value_type => String, :empty => true, :nil => false}
|
||||||
|
|
||||||
MULTI_TYPE = "multi"
|
MULTI_TYPE = "multi"
|
||||||
|
|
||||||
|
set_validators ::Validators::DeployEnv::RunList
|
||||||
|
|
||||||
def self.fields
|
def self.fields
|
||||||
["deploy_envs", "type", "description"]
|
["deploy_envs", "type", "description"]
|
||||||
end
|
end
|
||||||
@ -36,6 +39,7 @@ module Devops
|
|||||||
self.type = p["type"] || Devops::GenericType.name
|
self.type = p["type"] || Devops::GenericType.name
|
||||||
self.description = p["description"]
|
self.description = p["description"]
|
||||||
self.archived = p["archived"] || false
|
self.archived = p["archived"] || false
|
||||||
|
self.run_list = p["run_list"] || []
|
||||||
|
|
||||||
handler = Devops::TypesFactory.type self.type
|
handler = Devops::TypesFactory.type self.type
|
||||||
handler.prepare(self) unless handler.nil?
|
handler.prepare(self) unless handler.nil?
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
require "db/mongo/models/mongo_model"
|
require "db/mongo/models/mongo_model"
|
||||||
require "hooks"
|
require "hooks"
|
||||||
|
require "db/mongo/models/model_with_provider"
|
||||||
|
|
||||||
|
|
||||||
module Devops
|
module Devops
|
||||||
module Model
|
module Model
|
||||||
class Server < MongoModel
|
class Server < MongoModel
|
||||||
|
|
||||||
|
include ModelWithProvider
|
||||||
include Hooks
|
include Hooks
|
||||||
#params:
|
#params:
|
||||||
# out - container for output data
|
# out - container for output data
|
||||||
@ -20,8 +23,8 @@ module Devops
|
|||||||
define_hook :before_bootstrap
|
define_hook :before_bootstrap
|
||||||
define_hook :after_bootstrap
|
define_hook :after_bootstrap
|
||||||
|
|
||||||
attr_accessor :provider, :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack
|
attr_accessor :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack, :run_list
|
||||||
attr_accessor :options, :static, :key
|
attr_accessor :options, :key
|
||||||
|
|
||||||
types :id => {:type => String, :empty => false},
|
types :id => {:type => String, :empty => false},
|
||||||
:provider => {:type => String, :empty => false},
|
:provider => {:type => String, :empty => false},
|
||||||
@ -34,10 +37,13 @@ module Devops
|
|||||||
:created_by => {:type => String, :empty => false},
|
:created_by => {:type => String, :empty => false},
|
||||||
:chef_node_name => {:type => String, :empty => true},
|
:chef_node_name => {:type => String, :empty => true},
|
||||||
:reserved_by => {:type => String, :empty => true},
|
:reserved_by => {:type => String, :empty => true},
|
||||||
:stack => {:type => String, :nil => true}
|
:stack => {:type => String, :nil => true},
|
||||||
|
:run_list => {:type => Array, :value_type => String, :empty => true, :nil => false}
|
||||||
|
|
||||||
|
set_validators ::Validators::DeployEnv::RunList
|
||||||
|
|
||||||
def self.fields
|
def self.fields
|
||||||
["chef_node_name", "project", "deploy_env", "provider", "remote_user", "private_ip", "public_ip", "created_at", "created_by", "static", "key", "reserved_by"]
|
["chef_node_name", "project", "deploy_env", "provider", "remote_user", "private_ip", "public_ip", "created_at", "created_by", "key", "reserved_by"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize s={}
|
def initialize s={}
|
||||||
@ -51,10 +57,10 @@ module Devops
|
|||||||
self.private_ip = s["private_ip"]
|
self.private_ip = s["private_ip"]
|
||||||
self.created_at = s["created_at"]
|
self.created_at = s["created_at"]
|
||||||
self.created_by = s["created_by"]
|
self.created_by = s["created_by"]
|
||||||
self.static = s["static"]
|
|
||||||
self.key = s["key"]
|
self.key = s["key"]
|
||||||
self.reserved_by = s["reserved_by"]
|
self.reserved_by = s["reserved_by"]
|
||||||
self.stack = s["stack"]
|
self.stack = s["stack"]
|
||||||
|
self.run_list = p["run_list"] || []
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@ -81,10 +87,10 @@ module Devops
|
|||||||
"public_ip" => self.public_ip,
|
"public_ip" => self.public_ip,
|
||||||
"created_at" => self.created_at,
|
"created_at" => self.created_at,
|
||||||
"created_by" => self.created_by,
|
"created_by" => self.created_by,
|
||||||
"static" => self.static,
|
|
||||||
"key" => self.key,
|
"key" => self.key,
|
||||||
"reserved_by" => self.reserved_by,
|
"reserved_by" => self.reserved_by,
|
||||||
"stack" => stack
|
"stack" => stack,
|
||||||
|
"run_list" => self.run_list
|
||||||
}.delete_if{|k,v| v.nil?}
|
}.delete_if{|k,v| v.nil?}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -111,7 +117,7 @@ module Devops
|
|||||||
end
|
end
|
||||||
|
|
||||||
def static?
|
def static?
|
||||||
self.static || false
|
(self.provider == Provider::Static::PROVIDER) || false
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,9 +1,12 @@
|
|||||||
|
require "db/mongo/models/model_with_provider"
|
||||||
module Devops
|
module Devops
|
||||||
module Model
|
module Model
|
||||||
class StackBase < MongoModel
|
class StackBase < MongoModel
|
||||||
|
|
||||||
|
include ModelWithProvider
|
||||||
|
|
||||||
attr_accessor :id, :project, :deploy_env, :stack_template,
|
attr_accessor :id, :project, :deploy_env, :stack_template,
|
||||||
:cloud_stack_id, :provider, :parameters, :details, :owner
|
:cloud_stack_id, :parameters, :details, :owner
|
||||||
|
|
||||||
types id: {type: String, empty: false},
|
types id: {type: String, empty: false},
|
||||||
provider: {type: String, empty: false},
|
provider: {type: String, empty: false},
|
||||||
@ -11,7 +14,8 @@ module Devops
|
|||||||
deploy_env: {type: String},
|
deploy_env: {type: String},
|
||||||
stack_template: {type: String, empty: false},
|
stack_template: {type: String, empty: false},
|
||||||
cloud_stack_id: {type: String, nil: true},
|
cloud_stack_id: {type: String, nil: true},
|
||||||
owner: {type: String}
|
owner: {type: String},
|
||||||
|
:run_list => {:type => Array, :value_type => String, :empty => true, :nil => false}
|
||||||
# details: {type: Hash, nil: true} # Hash type isn't supported yet
|
# details: {type: Hash, nil: true} # Hash type isn't supported yet
|
||||||
|
|
||||||
def initialize attrs={}
|
def initialize attrs={}
|
||||||
@ -44,27 +48,27 @@ module Devops
|
|||||||
|
|
||||||
def create_stack_in_cloud!
|
def create_stack_in_cloud!
|
||||||
begin
|
begin
|
||||||
self.cloud_stack_id = provider_class.create_stack(self)
|
self.cloud_stack_id = provider_instance.create_stack(self)
|
||||||
rescue ProviderErrors::NameConflict
|
rescue ProviderErrors::NameConflict
|
||||||
raise InvalidRecord.new "Duplicate key error: stack with name '#{id}' already exists in cloud"
|
raise InvalidRecord.new "Duplicate key error: stack with name '#{id}' already exists in cloud"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_stack_in_cloud!
|
def delete_stack_in_cloud!
|
||||||
provider_class.delete_stack(self)
|
provider_instance.delete_stack(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def sync_details!
|
def sync_details!
|
||||||
self.details = provider_class.stack_details(self).attributes
|
self.details = provider_instance.stack_details(self).attributes
|
||||||
end
|
end
|
||||||
|
|
||||||
def resources
|
def resources
|
||||||
provider_class.stack_resources(self)
|
provider_instance.stack_resources(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
# resource_id is logical
|
# resource_id is logical
|
||||||
def resource(resource_id)
|
def resource(resource_id)
|
||||||
provider_class.stack_resource(self, resource_id)
|
provider_instance.stack_resource(self, resource_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def stack_status
|
def stack_status
|
||||||
@ -84,7 +88,6 @@ module Devops
|
|||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
attr_accessor :provider
|
|
||||||
|
|
||||||
# attrs should include:
|
# attrs should include:
|
||||||
# - id (String)
|
# - id (String)
|
||||||
@ -103,12 +106,6 @@ module Devops
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def provider_class
|
|
||||||
Provider::ProviderFactory.get(provider)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -13,16 +13,16 @@ class MongoConnector
|
|||||||
delegate(
|
delegate(
|
||||||
[:images, :image, :image_insert, :image_delete, :image_update] => :images_connector,
|
[:images, :image, :image_insert, :image_delete, :image_update] => :images_connector,
|
||||||
[:stack_templates, :stack_template, :stack_template_insert, :stack_template_delete, :stack_template_update] => :stack_templates_connector,
|
[:stack_templates, :stack_template, :stack_template_insert, :stack_template_delete, :stack_template_update] => :stack_templates_connector,
|
||||||
[:stacks, :stack, :stack_insert, :stack_delete, :stack_update] => :stacks_connector,
|
[:stacks, :stack, :stack_insert, :stack_delete, :stack_update, :set_stack_run_list] => :stacks_connector,
|
||||||
[:available_images, :add_available_images, :delete_available_images] => :filters_connector,
|
[:available_images, :add_available_images, :delete_available_images] => :filters_connector,
|
||||||
[:project, :projects_all, :projects, :project_names_with_envs,
|
[:project, :projects_all, :projects, :project_names_with_envs,
|
||||||
:projects_by_image, :projects_by_user, :project_insert, :project_update,
|
:projects_by_image, :projects_by_user, :project_insert, :project_update,
|
||||||
:project_delete, :is_project_exists?, :check_project_auth] => :projects_connector,
|
:project_delete, :is_project_exists?, :check_project_auth, :set_project_run_list, :set_project_env_run_list] => :projects_connector,
|
||||||
[:project_templates, :project_template_insert, :project_template_update,
|
[:project_templates, :project_template_insert, :project_template_update,
|
||||||
:project_template_delete] => :projects_templates_connector,
|
:project_template_delete] => :projects_templates_connector,
|
||||||
[:servers_find, :servers, :servers_by_names, :server_by_instance_id,
|
[:servers_find, :servers, :servers_by_names, :server_by_instance_id,
|
||||||
:server_by_chef_node_name, :servers_by_key, :server_insert,
|
:server_by_chef_node_name, :servers_by_key, :server_insert,
|
||||||
:server_delete, :server_update, :server_set_chef_node_name, :stack_servers_delete] => :servers_connector,
|
:server_delete, :server_update, :server_set_chef_node_name, :stack_servers_delete, :set_server_run_list] => :servers_connector,
|
||||||
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
|
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
|
||||||
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
||||||
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
||||||
|
|||||||
@ -47,6 +47,20 @@ module Sinatra
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def patch_with_headers path, opt={}, &block
|
||||||
|
headers = opt.delete(:headers) || []
|
||||||
|
before path do
|
||||||
|
check_headers *headers
|
||||||
|
protect!
|
||||||
|
end
|
||||||
|
|
||||||
|
patch path, opt, &block
|
||||||
|
|
||||||
|
after path do
|
||||||
|
statistic
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def delete_with_headers path, opt={}, &block
|
def delete_with_headers path, opt={}, &block
|
||||||
headers = opt.delete(:headers) || []
|
headers = opt.delete(:headers) || []
|
||||||
before path do
|
before path do
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user