deploy envs for providers
This commit is contained in:
parent
cc86dd79eb
commit
b0d5e8e1bd
@ -24,7 +24,8 @@ module DeployEnvCommands
|
||||
n = subnets - networks.map{|n| n["name"]}
|
||||
raise InvalidRecord.new "Invalid networks '#{n.join("', '")}'" unless n.empty?
|
||||
|
||||
filter = nil
|
||||
filter = yield(networks)
|
||||
=begin
|
||||
if p.name == ::Provider::Ec2::PROVIDER
|
||||
unless subnets.empty?
|
||||
subnets = [ subnets[0] ] if subnets.size > 1
|
||||
@ -35,6 +36,7 @@ module DeployEnvCommands
|
||||
raise InvalidRecord.new "Subnets array can not be empty"
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
g = groups - p.groups(filter).keys
|
||||
raise InvalidRecord.new "Invalid groups '#{g.join("', '")}'" unless g.empty?
|
||||
|
||||
@ -1,85 +1,25 @@
|
||||
require "db/mongo/models/mongo_model"
|
||||
require "db/exceptions/invalid_record"
|
||||
require "providers/provider_factory"
|
||||
require "commands/deploy_env"
|
||||
require "db/mongo/models/deploy_env_static"
|
||||
require "db/mongo/models/deploy_env_openstack"
|
||||
require "db/mongo/models/deploy_env_ec2"
|
||||
require "providers/static"
|
||||
require "providers/openstack"
|
||||
require "providers/ec2"
|
||||
|
||||
class DeployEnv < MongoModel
|
||||
|
||||
include DeployEnvCommands
|
||||
|
||||
attr_accessor :identifier, :flavor, :image, :run_list, :subnets, :expires, :provider, :groups, :users
|
||||
|
||||
types :identifier => {:type => String, :empty => false},
|
||||
:image => {:type => String, :empty => false},
|
||||
:flavor => {:type => String, :empty => false},
|
||||
:provider => {:type => String, :empty => false},
|
||||
:expires => {:type => String, :empty => false, :nil => true},
|
||||
:run_list => {:type => Array, :empty => true},
|
||||
:users => {:type => Array, :empty => true},
|
||||
:subnets => {:type => Array, :empty => true},
|
||||
:groups => {:type => Array, :empty => false}
|
||||
|
||||
def initialize d={}
|
||||
self.identifier = d["identifier"]
|
||||
self.flavor = d["flavor"]
|
||||
self.image = d["image"]
|
||||
b = d["subnets"] || []
|
||||
self.subnets = (b.is_a?(Array) ? b.uniq : b)
|
||||
b = d["run_list"] || []
|
||||
self.run_list = (b.is_a?(Array) ? b.uniq : b)
|
||||
self.expires = d["expires"]
|
||||
self.provider = d["provider"]
|
||||
b = d["groups"] || ["default"]
|
||||
self.groups = (b.is_a?(Array) ? b.uniq : b)
|
||||
b = d["users"] || []
|
||||
self.users = (b.is_a?(Array) ? b.uniq : b)
|
||||
end
|
||||
|
||||
def validate!
|
||||
super
|
||||
e = DeployEnv.validate_run_list(self.run_list)
|
||||
raise InvalidRecord.new "Invalid run list elements: '#{e.join("', '")}'" unless e.empty?
|
||||
|
||||
unless self.expires.nil?
|
||||
check_expires!(self.expires)
|
||||
end
|
||||
|
||||
p = ::Provider::ProviderFactory.get(self.provider)
|
||||
check_flavor!(p, self.flavor)
|
||||
check_image!(p, self.image)
|
||||
check_subnets_and_groups!(p, self.subnets, self.groups)
|
||||
check_users!(self.users)
|
||||
|
||||
true
|
||||
rescue InvalidRecord => e
|
||||
raise InvalidRecord.new "Deploy environment '#{self.identifier}'. " + e.message
|
||||
end
|
||||
|
||||
def to_hash
|
||||
{
|
||||
"flavor" => self.flavor,
|
||||
"identifier" => self.identifier,
|
||||
"image" => self.image,
|
||||
"run_list" => self.run_list,
|
||||
"subnets" => self.subnets,
|
||||
"expires" => self.expires,
|
||||
"provider" => self.provider,
|
||||
"groups" => self.groups,
|
||||
"users" => self.users
|
||||
}
|
||||
end
|
||||
|
||||
def self.create_from_bson d
|
||||
DeployEnv.new(d)
|
||||
end
|
||||
class DeployEnv
|
||||
|
||||
def self.create hash
|
||||
DeployEnv.new(hash)
|
||||
end
|
||||
|
||||
def self.validate_run_list list
|
||||
rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/
|
||||
list.select {|l| (rl =~ l).nil?}
|
||||
c = case(hash["provider"])
|
||||
when ::Provider::Static::PROVIDER
|
||||
DeployEnvStatic
|
||||
when ::Provider::Ec2::PROVIDER
|
||||
DeployEnvEc2
|
||||
when ::Provider::Openstack::PROVIDER
|
||||
DeployEnvOpenstack
|
||||
else
|
||||
raise InvalidRecord.new "Invalid provider '#{hash["provider"]}' for deploy envirenment '#{hash["identifier"]}'"
|
||||
end
|
||||
c.new(hash)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
47
devops-service/db/mongo/models/deploy_env_base.rb
Normal file
47
devops-service/db/mongo/models/deploy_env_base.rb
Normal file
@ -0,0 +1,47 @@
|
||||
require "db/mongo/models/mongo_model"
|
||||
require "db/exceptions/invalid_record"
|
||||
require "commands/deploy_env"
|
||||
|
||||
class DeployEnvBase < MongoModel
|
||||
|
||||
include DeployEnvCommands
|
||||
|
||||
attr_accessor :identifier, :run_list, :expires, :provider, :users
|
||||
|
||||
def initialize d={}
|
||||
self.identifier = d["identifier"]
|
||||
b = d["run_list"] || []
|
||||
self.run_list = (b.is_a?(Array) ? b.uniq : b)
|
||||
self.expires = d["expires"]
|
||||
self.provider = d["provider"]
|
||||
b = d["users"] || []
|
||||
self.users = (b.is_a?(Array) ? b.uniq : b)
|
||||
end
|
||||
|
||||
def validate!
|
||||
super
|
||||
e = DeployEnvBase.validate_run_list(self.run_list)
|
||||
raise InvalidRecord.new "Invalid run list elements: '#{e.join("', '")}'" unless e.empty?
|
||||
|
||||
unless self.expires.nil?
|
||||
check_expires!(self.expires)
|
||||
end
|
||||
check_users!(self.users)
|
||||
end
|
||||
|
||||
def to_hash
|
||||
{
|
||||
"identifier" => self.identifier,
|
||||
"run_list" => self.run_list,
|
||||
"expires" => self.expires,
|
||||
"provider" => self.provider,
|
||||
"users" => self.users
|
||||
}
|
||||
end
|
||||
|
||||
def self.validate_run_list list
|
||||
rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/
|
||||
list.select {|l| (rl =~ l).nil?}
|
||||
end
|
||||
|
||||
end
|
||||
63
devops-service/db/mongo/models/deploy_env_ec2.rb
Normal file
63
devops-service/db/mongo/models/deploy_env_ec2.rb
Normal file
@ -0,0 +1,63 @@
|
||||
require "db/mongo/models/deploy_env_base"
|
||||
require "providers/provider_factory"
|
||||
|
||||
class DeployEnvEc2 < DeployEnvBase
|
||||
|
||||
attr_accessor :flavor, :image, :subnets, :groups
|
||||
|
||||
types :identifier => {:type => String, :empty => false},
|
||||
:image => {:type => String, :empty => false},
|
||||
:flavor => {:type => String, :empty => false},
|
||||
:provider => {:type => String, :empty => false},
|
||||
:expires => {:type => String, :empty => false, :nil => true},
|
||||
:run_list => {:type => Array, :empty => true},
|
||||
:users => {:type => Array, :empty => true},
|
||||
:subnets => {:type => Array, :empty => true},
|
||||
:groups => {:type => Array, :empty => false}
|
||||
|
||||
def initialize d={}
|
||||
super(d)
|
||||
self.flavor = d["flavor"]
|
||||
self.image = d["image"]
|
||||
b = d["subnets"] || []
|
||||
self.subnets = if b.is_a?(Array)
|
||||
(b.size > 1 ? [ b[0] ] : b)
|
||||
else
|
||||
b
|
||||
end
|
||||
b = d["groups"] || ["default"]
|
||||
self.groups = (b.is_a?(Array) ? b.uniq : b)
|
||||
end
|
||||
|
||||
def validate!
|
||||
super
|
||||
|
||||
p = ::Provider::ProviderFactory.get(self.provider)
|
||||
check_flavor!(p, self.flavor)
|
||||
check_image!(p, self.image)
|
||||
check_subnets_and_groups!(p, self.subnets, self.groups) do |networks|
|
||||
unless self.subnets.empty?
|
||||
{"vpc-id" => networks.detect{|n| n["name"] == self.subnets[0]}["vpcId"] }
|
||||
end
|
||||
end
|
||||
|
||||
true
|
||||
rescue InvalidRecord => e
|
||||
raise InvalidRecord.new "Deploy environment '#{self.identifier}'. " + e.message
|
||||
end
|
||||
|
||||
def to_hash
|
||||
h = super
|
||||
h.merge!({
|
||||
"flavor" => self.flavor,
|
||||
"image" => self.image,
|
||||
"subnets" => self.subnets,
|
||||
"groups" => self.groups
|
||||
})
|
||||
end
|
||||
|
||||
def self.create hash
|
||||
DeployEnvEc2.new(hash)
|
||||
end
|
||||
|
||||
end
|
||||
59
devops-service/db/mongo/models/deploy_env_openstack.rb
Normal file
59
devops-service/db/mongo/models/deploy_env_openstack.rb
Normal file
@ -0,0 +1,59 @@
|
||||
require "db/mongo/models/deploy_env_base"
|
||||
require "providers/provider_factory"
|
||||
|
||||
class DeployEnvOpenstack < DeployEnvBase
|
||||
|
||||
attr_accessor :flavor, :image, :subnets, :groups
|
||||
|
||||
types :identifier => {:type => String, :empty => false},
|
||||
:image => {:type => String, :empty => false},
|
||||
:flavor => {:type => String, :empty => false},
|
||||
:provider => {:type => String, :empty => false},
|
||||
:expires => {:type => String, :empty => false, :nil => true},
|
||||
:run_list => {:type => Array, :empty => true},
|
||||
:users => {:type => Array, :empty => true},
|
||||
:subnets => {:type => Array, :empty => true},
|
||||
:groups => {:type => Array, :empty => false}
|
||||
|
||||
def initialize d={}
|
||||
super(d)
|
||||
self.flavor = d["flavor"]
|
||||
self.image = d["image"]
|
||||
b = d["subnets"] || []
|
||||
self.subnets = (b.is_a?(Array) ? b.uniq : b)
|
||||
b = d["groups"] || ["default"]
|
||||
self.groups = (b.is_a?(Array) ? b.uniq : b)
|
||||
end
|
||||
|
||||
def validate!
|
||||
super
|
||||
|
||||
p = ::Provider::ProviderFactory.get(self.provider)
|
||||
check_flavor!(p, self.flavor)
|
||||
check_image!(p, self.image)
|
||||
check_subnets_and_groups!(p, self.subnets, self.groups) do |networks|
|
||||
if self.subnets.empty?
|
||||
raise InvalidRecord.new "Subnets array can not be empty"
|
||||
end
|
||||
end
|
||||
|
||||
true
|
||||
rescue InvalidRecord => e
|
||||
raise InvalidRecord.new "Deploy environment '#{self.identifier}'. " + e.message
|
||||
end
|
||||
|
||||
def to_hash
|
||||
h = super
|
||||
h.merge!({
|
||||
"flavor" => self.flavor,
|
||||
"image" => self.image,
|
||||
"subnets" => self.subnets,
|
||||
"groups" => self.groups
|
||||
})
|
||||
end
|
||||
|
||||
def self.create hash
|
||||
DeployEnvOpenstack.new(hash)
|
||||
end
|
||||
|
||||
end
|
||||
45
devops-service/db/mongo/models/deploy_env_static.rb
Normal file
45
devops-service/db/mongo/models/deploy_env_static.rb
Normal file
@ -0,0 +1,45 @@
|
||||
require "db/mongo/models/deploy_env_base"
|
||||
|
||||
class DeployEnvStatic < DeployEnvBase
|
||||
|
||||
types :identifier => {:type => String, :empty => false},
|
||||
:provider => {:type => String, :empty => false},
|
||||
:expires => {:type => String, :empty => false, :nil => true},
|
||||
:run_list => {:type => Array, :empty => true},
|
||||
:users => {:type => Array, :empty => true}
|
||||
|
||||
def initialize d={}
|
||||
super(d)
|
||||
=begin
|
||||
self.identifier = d["identifier"]
|
||||
b = d["run_list"] || []
|
||||
self.run_list = (b.is_a?(Array) ? b.uniq : b)
|
||||
self.expires = d["expires"]
|
||||
self.provider = d["provider"]
|
||||
b = d["users"] || []
|
||||
self.users = (b.is_a?(Array) ? b.uniq : b)
|
||||
=end
|
||||
end
|
||||
|
||||
def validate!
|
||||
super
|
||||
end
|
||||
|
||||
def to_hash
|
||||
super
|
||||
=begin
|
||||
{
|
||||
"identifier" => self.identifier,
|
||||
"run_list" => self.run_list,
|
||||
"expires" => self.expires,
|
||||
"provider" => self.provider,
|
||||
"users" => self.users
|
||||
}
|
||||
=end
|
||||
end
|
||||
|
||||
def self.create hash
|
||||
DeployEnvStatic.new(hash)
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Reference in New Issue
Block a user