60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 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
 | 
