| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | require "db/mongo/models/mongo_model" | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | require "providers/provider_factory" | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  | require "db/mongo/models/model_with_provider" | 
					
						
							| 
									
										
										
										
											2015-08-13 15:49:37 +03:00
										 |  |  | require "db/validators/deploy_env/run_list" | 
					
						
							|  |  |  | require "db/validators/deploy_env/expiration" | 
					
						
							|  |  |  | require "db/validators/deploy_env/users" | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  | module Devops | 
					
						
							|  |  |  |   module Model | 
					
						
							|  |  |  |     class DeployEnvBase < MongoModel | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |       include ModelWithProvider | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-13 15:49:37 +03:00
										 |  |  |       attr_accessor :identifier, :run_list, :expires, :users | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       set_validators ::Validators::DeployEnv::RunList, | 
					
						
							|  |  |  |                      ::Validators::DeployEnv::Expiration, | 
					
						
							|  |  |  |                      ::Validators::DeployEnv::Users | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def initialize d={} | 
					
						
							|  |  |  |         self.identifier = d["identifier"] | 
					
						
							|  |  |  |         b = d["run_list"] || [] | 
					
						
							| 
									
										
										
										
											2015-08-13 15:49:37 +03:00
										 |  |  |         self.run_list = b.uniq | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |         self.expires = d["expires"] | 
					
						
							|  |  |  |         self.provider = d["provider"] | 
					
						
							|  |  |  |         b = d["users"] || [] | 
					
						
							| 
									
										
										
										
											2015-08-13 15:49:37 +03:00
										 |  |  |         self.users = b.uniq | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def to_hash | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "identifier" => self.identifier, | 
					
						
							|  |  |  |           "run_list" => self.run_list, | 
					
						
							|  |  |  |           "expires" => self.expires, | 
					
						
							|  |  |  |           "provider" => self.provider, | 
					
						
							|  |  |  |           "users" => self.users | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-22 14:30:52 +03:00
										 |  |  |       def add_users users | 
					
						
							|  |  |  |         self.users = (self.users + users).uniq | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def build_error_message(message) | 
					
						
							|  |  |  |         "Deploy environment '#{self.identifier}'. " + message | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-05 14:54:47 +03:00
										 |  |  |       def create_role project_id | 
					
						
							|  |  |  |         knife = KnifeFactory.instance | 
					
						
							|  |  |  |         if knife.nil? | 
					
						
							|  |  |  |           DevopsLogger.logger.error "Can not get knife instance" | 
					
						
							|  |  |  |           return nil | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         all_roles = knife.roles | 
					
						
							|  |  |  |         info = {} | 
					
						
							|  |  |  |         if all_roles.nil? | 
					
						
							|  |  |  |           msg = "Can't get roles list from chef" | 
					
						
							|  |  |  |           DevopsLogger.logger.error msg | 
					
						
							|  |  |  |           return {error: msg} | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         role_name = knife.role_name(project_id, self.identifier) | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |           if all_roles.include? role_name | 
					
						
							|  |  |  |             info[:exist] = role_name | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             knife.create_role role_name, project_id, self.identifier | 
					
						
							|  |  |  |             info[:new] = role_name | 
					
						
							|  |  |  |             DevopsLogger.logger.info "Role '#{role_name}' created" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           self.run_list << "role[#{role_name}]" | 
					
						
							|  |  |  |         rescue => er | 
					
						
							|  |  |  |           info[:error] = role_name | 
					
						
							|  |  |  |           DevopsLogger.logger.error "Role '#{role_name}' can not be created: #{er.message}" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         info | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-06-24 13:40:52 +04:00
										 |  |  | end |