#789: create server and stack with provider account

This commit is contained in:
Anton Martynov 2015-10-27 12:01:21 +03:00
parent 80b22f8a4d
commit 2dbc20a47f
8 changed files with 32 additions and 15 deletions

View File

@ -25,7 +25,10 @@ module Devops
raise InvalidRecord.new("Environment '#{env.identifier}' of project '#{project.id}' has no stack template") if env.stack_template.nil? raise InvalidRecord.new("Environment '#{env.identifier}' of project '#{project.id}' has no stack template") if env.stack_template.nil?
object["stack_template"] = env.stack_template object["stack_template"] = env.stack_template
object["owner"] = parser.current_user object["owner"] = parser.current_user
object["provider"] = env.provider
object["provider_account"] = env.provider_account
# TODO: without provider_name
uri = Worker.start_async(StackBootstrapWorker, @request, uri = Worker.start_async(StackBootstrapWorker, @request,
provider_name: env.provider, provider_name: env.provider,
stack_attributes: object stack_attributes: object

View File

@ -24,6 +24,7 @@ module Devops
:groups => {:type => Array, :empty => false}, :groups => {:type => Array, :empty => false},
:stack_template => {:type => String, :empty => false, :nil => true} :stack_template => {:type => String, :empty => false, :nil => true}
#TODO: account validator
set_validators ::Validators::DeployEnv::Flavor, set_validators ::Validators::DeployEnv::Flavor,
::Validators::DeployEnv::Image, ::Validators::DeployEnv::Image,
::Validators::DeployEnv::SubnetNotEmpty, ::Validators::DeployEnv::SubnetNotEmpty,

View File

@ -19,10 +19,10 @@ module Devops
def initialize d={} def initialize d={}
self.identifier = d["identifier"] self.identifier = d["identifier"]
set_provider(d)
b = d["run_list"] || [] b = d["run_list"] || []
self.run_list = b.uniq self.run_list = b.uniq
self.expires = d["expires"] self.expires = d["expires"]
self.provider = d["provider"]
b = d["users"] || [] b = d["users"] || []
self.users = b.uniq self.users = b.uniq
end end
@ -32,9 +32,8 @@ module Devops
"identifier" => self.identifier, "identifier" => self.identifier,
"run_list" => self.run_list, "run_list" => self.run_list,
"expires" => self.expires, "expires" => self.expires,
"provider" => self.provider,
"users" => self.users "users" => self.users
} }.merge(provider_hash)
end end
def add_users users def add_users users

View File

@ -4,11 +4,24 @@ module Devops
module Model module Model
module ModelWithProvider module ModelWithProvider
attr_accessor :provider attr_accessor :provider, :provider_account
def provider_instance def provider_instance
@provider_instance ||= Provider::ProviderFactory.get(self.provider) @provider_instance ||= Provider::ProviderFactory.get(self.provider, self.provider_account)
end end
def set_provider hash
self.provider = hash["provider"]
self.provider_account = hash["provider_account"]
end
def provider_hash
{
"provider" => self.provider,
"provider_account" => self.provider_account
}
end
end end
end end
end end

View File

@ -33,7 +33,7 @@ module Devops
end end
def initialize s={} def initialize s={}
self.provider = s["provider"] self.set_provider(s)
self.chef_node_name = s["chef_node_name"] self.chef_node_name = s["chef_node_name"]
self.id = s["_id"] self.id = s["_id"]
self.remote_user = s["remote_user"] self.remote_user = s["remote_user"]
@ -66,7 +66,6 @@ module Devops
def to_hash_without_id def to_hash_without_id
{ {
"provider" => self.provider,
"chef_node_name" => self.chef_node_name, "chef_node_name" => self.chef_node_name,
"remote_user" => self.remote_user, "remote_user" => self.remote_user,
"project" => self.project, "project" => self.project,
@ -79,7 +78,7 @@ module Devops
"reserved_by" => self.reserved_by, "reserved_by" => self.reserved_by,
"stack" => stack, "stack" => stack,
"run_list" => self.run_list "run_list" => self.run_list
}.delete_if { |k,v| v.nil? } }.merge(provider_hash).delete_if { |k,v| v.nil? }
end end
def self.build_from_bson s def self.build_from_bson s
@ -98,7 +97,7 @@ module Devops
end end
def static? def static?
(self.provider == Provider::Static::PROVIDER) || false self.provider == Provider::Static::PROVIDER
end end
end end

View File

@ -21,7 +21,7 @@ module Devops
def initialize attrs={} def initialize attrs={}
# self.provider = self.class.provider # self.provider = self.class.provider
self.set_provider(attrs)
self.id = attrs['id'] self.id = attrs['id']
self.project = attrs['project'] self.project = attrs['project']
self.deploy_env = attrs['deploy_env'] self.deploy_env = attrs['deploy_env']
@ -36,7 +36,6 @@ module Devops
def to_hash_without_id def to_hash_without_id
{ {
provider: provider,
project: project, project: project,
deploy_env: deploy_env, deploy_env: deploy_env,
stack_template: stack_template, stack_template: stack_template,
@ -46,7 +45,7 @@ module Devops
details: bson_safe_details, details: bson_safe_details,
stack_status: stack_status, stack_status: stack_status,
owner: owner owner: owner
} }.merge(provider_hash)
end end
# overrided in ec2 # overrided in ec2
@ -106,6 +105,8 @@ module Devops
# - id (String) # - id (String)
# - deploy_env (String) # - deploy_env (String)
# - stack_template (String) # - stack_template (String)
# - provider (String)
# - provider_account (String)
def create(attrs, out) def create(attrs, out)
model = new(attrs) model = new(attrs)
model.create_stack_in_cloud!(out) model.create_stack_in_cloud!(out)

View File

@ -74,11 +74,11 @@ module Devops
end end
def create_server options def create_server options
@server = Devops::Model::Server.new({"project" => @project.id, "deploy_env" => @deploy_env.identifier, "created_by" => options["created_by"], "provider" => @deploy_env.provider}) @server = Devops::Model::Server.new({"project" => @project.id, "deploy_env" => @deploy_env.identifier, "created_by" => options["created_by"], "provider" => @deploy_env.provider, "provider_account" => @deploy_env.provider_account})
provider = @server.provider_instance provider = @deploy_env.provider_instance
mongo = ::Devops::Db.connector mongo = ::Devops::Db.connector
begin begin
@out << "Create server...\n" @out.puts "Create server..."
@out.flush @out.flush
@server.run_list = options["run_list"] || [] @server.run_list = options["run_list"] || []

View File

@ -16,6 +16,7 @@ module Provider
else else
@@providers_with_accounts_factories[provider].connection(account) @@providers_with_accounts_factories[provider].connection(account)
end end
# TODO: new exception
raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil? raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil?
p p
end end