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"]}
|
n = subnets - networks.map{|n| n["name"]}
|
||||||
raise InvalidRecord.new "Invalid networks '#{n.join("', '")}'" unless n.empty?
|
raise InvalidRecord.new "Invalid networks '#{n.join("', '")}'" unless n.empty?
|
||||||
|
|
||||||
filter = nil
|
filter = yield(networks)
|
||||||
|
=begin
|
||||||
if p.name == ::Provider::Ec2::PROVIDER
|
if p.name == ::Provider::Ec2::PROVIDER
|
||||||
unless subnets.empty?
|
unless subnets.empty?
|
||||||
subnets = [ subnets[0] ] if subnets.size > 1
|
subnets = [ subnets[0] ] if subnets.size > 1
|
||||||
@ -35,6 +36,7 @@ module DeployEnvCommands
|
|||||||
raise InvalidRecord.new "Subnets array can not be empty"
|
raise InvalidRecord.new "Subnets array can not be empty"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
=end
|
||||||
|
|
||||||
g = groups - p.groups(filter).keys
|
g = groups - p.groups(filter).keys
|
||||||
raise InvalidRecord.new "Invalid groups '#{g.join("', '")}'" unless g.empty?
|
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 "db/exceptions/invalid_record"
|
||||||
require "providers/provider_factory"
|
require "db/mongo/models/deploy_env_static"
|
||||||
require "commands/deploy_env"
|
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
|
class DeployEnv
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
def self.create hash
|
def self.create hash
|
||||||
DeployEnv.new(hash)
|
c = case(hash["provider"])
|
||||||
end
|
when ::Provider::Static::PROVIDER
|
||||||
|
DeployEnvStatic
|
||||||
def self.validate_run_list list
|
when ::Provider::Ec2::PROVIDER
|
||||||
rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/
|
DeployEnvEc2
|
||||||
list.select {|l| (rl =~ l).nil?}
|
when ::Provider::Openstack::PROVIDER
|
||||||
|
DeployEnvOpenstack
|
||||||
|
else
|
||||||
|
raise InvalidRecord.new "Invalid provider '#{hash["provider"]}' for deploy envirenment '#{hash["identifier"]}'"
|
||||||
|
end
|
||||||
|
c.new(hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
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