2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								require  " db/mongo/models/mongo_model "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require  " db/exceptions/invalid_record "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require  " commands/deploy_env "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								module  Devops  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  module  Model 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    class  DeployEnvMulti  <  MongoModel 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      include  DeployEnvCommands 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      attr_accessor  :identifier ,  :servers ,  :expires ,  :users 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      types  :identifier  = >  { :type  = >  String ,  :empty  = >  false } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            :expires  = >  { :type  = >  String ,  :empty  = >  false ,  :nil  = >  true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            :users  = >  { :type  = >  Array ,  :empty  = >  true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            :servers  = >  { :type  = >  Array ,  :empty  = >  false ,  :value_type  = >  Hash } 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      def  initialize  d = { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . identifier  =  d [ " identifier " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . expires  =  d [ " expires " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . servers  =  d [ " servers " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        b  =  d [ " users " ]  ||  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . users  =  ( b . is_a? ( Array )  ?  b . uniq  :  b ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      def  validate! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        super 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        e  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        check_users! ( self . users ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unless  self . expires . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          check_expires! ( self . expires ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . servers . each_with_index  do  | server ,  i | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  server [ " priority " ] . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              server [ " priority " ]  =  100 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Integer ( server [ " priority " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              rescue  ArgumentError ,  TypeError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                raise  InvalidRecord . new ( " Parameter 'priority' should be an integer " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ! server [ " subprojects " ] . is_a? ( Array )  or  server [ " subprojects " ] . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              raise  InvalidRecord . new ( " Parameter 'subprojects' must be a not empty array " ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  server [ " subprojects " ] . size  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              check_provider ( server [ " provider " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              # strings 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              %w{ image flavor provider } . each  do  | p | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  check_string! ( server [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                rescue  ArgumentError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  raise  InvalidRecord . new ( " Parameter ' #{ p } ' must be a not empty string " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              # arrays 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              %w{ subnets groups } . each  do  | p | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  raise  ArgumentError  if  ! server [ p ] . is_a? ( Array )  or  server [ p ] . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  server [ p ] . each  do  | v | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    raise  ArgumentError  unless  v . is_a? ( String ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                rescue  ArgumentError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  raise  InvalidRecord . new ( " Parameter ' #{ p } ' must be a not empty array of strings " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								              end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              p  =  :: Provider :: ProviderFactory . get ( server [ " provider " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              check_flavor! ( p ,  server [ " flavor " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              check_image! ( p ,  server [ " image " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              check_subnets_and_groups! ( p ,  server [ " subnets " ] ,  server [ " groups " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            names  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            server [ " subprojects " ] . each_with_index  do  | sp ,  spi | 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								              begin 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                raise  InvalidRecord . new ( " Parameter 'subprojects' must contains objects only " )  unless  sp . is_a? ( Hash ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                %w{ name env } . each  do  | p | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    check_string! ( sp [ p ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  rescue  ArgumentError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    raise  InvalidRecord . new ( " Parameter ' #{ p } ' must be a not empty string " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              rescue   InvalidRecord  = >  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                raise  InvalidRecord . new ( " Subproject ' #{ spi } '.  #{ e . message } " ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								              end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            pdb  =  :: Devops :: Db . connector . project_names_with_envs ( server [ " subprojects " ] . map { | sp |  sp [ " name " ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            server [ " subprojects " ] . each_with_index  do  | sp ,  spi | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              raise  InvalidRecord . new ( " Subproject ' #{ spi } '. Project ' #{ sp [ " name " ] } ' with env ' #{ sp [ " env " ] } ' does not exist " )  if  pdb [ sp [ " name " ] ] . nil?  or  ! pdb [ sp [ " name " ] ] . include? ( sp [ " env " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          rescue  InvalidRecord  = >  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  InvalidRecord . new ( " Server ' #{ i } '.  #{ e . message } " ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        true 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      rescue  InvalidRecord  = >  e 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        raise  InvalidRecord . new  " Deploy environment ' #{ self . identifier } '.  "  +  e . message 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      def  to_hash 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          " identifier "  = >  self . identifier , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          " expires "  = >  self . expires , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          " users "  = >  self . users , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          " servers "  = >  self . servers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      def  self . build_from_bson  d 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        DeployEnvMulti . new ( d ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      def  self . create  hash 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        DeployEnvMulti . new ( hash ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 12:20:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-08 15:34:26 +04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								end