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