| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | require File.join(File.dirname(__FILE__), "worker") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "providers/provider_factory" | 
					
						
							|  |  |  | require "db/mongo/models/server" | 
					
						
							|  |  |  | require "json" | 
					
						
							|  |  |  | require "fileutils" | 
					
						
							|  |  |  | require "commands/status" | 
					
						
							| 
									
										
										
										
											2014-11-17 14:23:59 +03:00
										 |  |  | require "db/mongo/models/report" | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ProjectTestWorker < Worker | 
					
						
							|  |  |  |   include StatusCommands | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |   def perform(params) | 
					
						
							|  |  |  |     user = params.fetch('user') | 
					
						
							|  |  |  |     project_name = params.fetch('project') | 
					
						
							|  |  |  |     deploy_env_name = params.fetch('deploy_env') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     call(nil) do |not_used, out, file| | 
					
						
							|  |  |  |       DevopsLogger.logger.info "Test project '#{project_name}' and env '#{deploy_env_name}' (user - #{user})" | 
					
						
							|  |  |  |       project = mongo.project(project_name) | 
					
						
							|  |  |  |       env = project.deploy_env(deploy_env_name) | 
					
						
							|  |  |  |       save_report(file, user, project_name, deploy_env_name) | 
					
						
							| 
									
										
										
										
											2014-11-17 14:23:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |       executor = Devops::Executor::ServerExecutor.new(nil, out) | 
					
						
							|  |  |  |       executor.project = project | 
					
						
							|  |  |  |       executor.deploy_env = env | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |       result = {:servers => []} | 
					
						
							|  |  |  |       project.deploy_envs = [ env ] | 
					
						
							|  |  |  |       result[:project] = project.to_hash | 
					
						
							|  |  |  |       status = 0
 | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |       sr = {} | 
					
						
							|  |  |  |       t1 = Time.now | 
					
						
							|  |  |  |       out << "\n=== Create server ===\n" | 
					
						
							|  |  |  |       out.flush | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |       if executor.create_server("without_bootstrap" => true) | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         out << "\n=== Create server - OK ===\n" | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |         out.flush | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         t2 = Time.now | 
					
						
							|  |  |  |         s = executor.server | 
					
						
							|  |  |  |         sr[:id] = s.id | 
					
						
							|  |  |  |         sr[:create] = {:status => true} | 
					
						
							|  |  |  |         sr[:create][:time] = time_diff_s(t1, t2) | 
					
						
							|  |  |  |         DevopsLogger.logger.info "Server with parameters: #{s.to_hash.inspect} is running" | 
					
						
							|  |  |  |         out << "\n=== Bootstrap ===\n" | 
					
						
							|  |  |  |         out.flush | 
					
						
							|  |  |  |         r = executor.bootstrap({}) | 
					
						
							|  |  |  |         t1 = Time.now | 
					
						
							|  |  |  |         sr[:chef_node_name] = s.chef_node_name | 
					
						
							|  |  |  |         if r == 0
 | 
					
						
							|  |  |  |           out << "\n=== Bootstrap - OK ===\n" | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |           out.flush | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |           sr[:bootstrap] = {:status => true} | 
					
						
							|  |  |  |           sr[:bootstrap][:time] = time_diff_s(t2, t1) | 
					
						
							|  |  |  |           DevopsLogger.logger.info "Server with id '#{s.id}' is bootstraped" | 
					
						
							|  |  |  |           out << "\n=== Check server ===\n" | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |           out.flush | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |           if executor.check_server | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |             # mongo.server_insert s | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |             out << "\n=== OK, server has been inserted ===\n" | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |             out.flush | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         else | 
					
						
							|  |  |  |           status = 2
 | 
					
						
							|  |  |  |           out << "\n=== Bootstrap - FAIL ===\n" | 
					
						
							|  |  |  |           out.flush | 
					
						
							|  |  |  |           sr[:bootstrap] = {:status => false} | 
					
						
							|  |  |  |           sr[:bootstrap][:return_code] = r | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         t1 = Time.now | 
					
						
							|  |  |  |         out << "\n=== Delete server ===\n" | 
					
						
							|  |  |  |         out.flush | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |         r = executor.delete_from_chef_server(s.chef_node_name) | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         begin | 
					
						
							|  |  |  |           r[:server] = s.provider_instance.delete_server s | 
					
						
							|  |  |  |           out << "\n=== Delete server - OK ===\n" | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |           out.flush | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         rescue Fog::Compute::OpenStack::NotFound, Fog::Compute::AWS::Error | 
					
						
							|  |  |  |           status = 3
 | 
					
						
							|  |  |  |           out << "\n=== Delete server - FAIL ===\n" | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |           out.flush | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |           r[:server] = "Server with id '#{s.id}' not found in '#{s.provider_instance.name}' servers" | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |           DevopsLogger.logger.warn r[:server] | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         mongo.server_delete s.id | 
					
						
							|  |  |  |         t2 = Time.now | 
					
						
							|  |  |  |         sr[:delete] = {:status => true} | 
					
						
							|  |  |  |         sr[:delete][:time] = time_diff_s(t1, t2) | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         status = 1
 | 
					
						
							|  |  |  |         out << "\n=== Create server - FAIL ===\n" | 
					
						
							|  |  |  |         out.flush | 
					
						
							|  |  |  |         sr[:create] = {:status => false} | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |       result[:servers].push sr | 
					
						
							| 
									
										
										
										
											2014-12-04 13:07:25 +03:00
										 |  |  |       out << "\n\n#{result.to_json}" | 
					
						
							|  |  |  |       status | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def save_report(file, user, project_name, deploy_env_name) | 
					
						
							|  |  |  |     report = { | 
					
						
							|  |  |  |       "file" => file, | 
					
						
							|  |  |  |       "_id" => jid, | 
					
						
							|  |  |  |       "created_by" => user, | 
					
						
							|  |  |  |       "project" => project_name, | 
					
						
							|  |  |  |       "deploy_env" => deploy_env_name, | 
					
						
							|  |  |  |       "type" => Devops::Model::Report::PROJECT_TEST_TYPE | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     mongo.save_report(Devops::Model::Report.new(report)) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | end |