| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | require "commands/status" | 
					
						
							|  |  |  | require "db/mongo/models/project" | 
					
						
							|  |  |  | require "workers/project_test_worker" | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  | require "app/api2/parsers/project" | 
					
						
							| 
									
										
										
										
											2015-07-31 15:08:40 +03:00
										 |  |  | require "lib/project/type/types_factory" | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  | require "lib/executors/server_executor" | 
					
						
							| 
									
										
										
										
											2016-02-02 11:43:13 +03:00
										 |  |  | require "workers/delete_server_worker" | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  | require_relative "../helpers/version_2.rb" | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | require_relative "request_handler" | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |   module API2_0 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |     module Handler | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |       class Project < RequestHandler | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         set_parser Devops::API2_0::Parser::ProjectParser | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |         include Devops::API2_0::Helpers | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         extend StatusCommands | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-31 15:08:40 +03:00
										 |  |  |         def project_types | 
					
						
							|  |  |  |           Devops::TypesFactory.types_names | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def projects | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |           Devops::Db.connector.projects(nil, nil, parser.projects, parser.archived_projects) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def project id | 
					
						
							|  |  |  |           Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 15:26:36 +03:00
										 |  |  |         def project_deploy_envs(id) | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           project.deploy_envs | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def project_deploy_env(project_id, env) | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(project_id) | 
					
						
							|  |  |  |           project.deploy_env(env) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def project_servers id | 
					
						
							|  |  |  |           Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           Devops::Db.connector.servers(id, parser.project_servers) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |         def project_stacks id | 
					
						
							|  |  |  |           # check if project exists | 
					
						
							|  |  |  |           Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           options = {project: id} | 
					
						
							|  |  |  |           deploy_env = parser.project_stacks | 
					
						
							|  |  |  |           options[:deploy_env] = deploy_env if deploy_env | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |           Devops::Db.connector.stacks(options) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def create_project | 
					
						
							|  |  |  |           p = parser.create_project | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |           raise InvalidRecord.new("Project '#{p.id}' already exist") if Devops::Db.connector.is_project_exists?(p) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-22 14:30:52 +03:00
										 |  |  |           p.deploy_envs.each do |env| | 
					
						
							|  |  |  |             env.add_users [parser.current_user] | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-09-29 13:44:39 +03:00
										 |  |  |           res = p.create | 
					
						
							|  |  |  |           info = if p.multi? | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             "Project '#{p.id}' with type 'multi' created" | 
					
						
							|  |  |  |           else | 
					
						
							| 
									
										
										
										
											2015-09-29 13:44:39 +03:00
										 |  |  |             "Project '#{p.id}' created." | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-09-29 21:59:56 +03:00
										 |  |  | #          info << " " + res[:before] if res[:before] | 
					
						
							|  |  |  | #          info << " " + res[:after] if res[:after] | 
					
						
							| 
									
										
										
										
											2015-09-29 13:44:39 +03:00
										 |  |  |           info | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |         def set_project_components id | 
					
						
							|  |  |  |           body = parser.set_project_components | 
					
						
							| 
									
										
										
										
											2015-09-14 18:43:56 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |           project.components = body["components"] | 
					
						
							|  |  |  |           project.validate_components | 
					
						
							| 
									
										
										
										
											2015-09-14 18:43:03 +03:00
										 |  |  |           Devops::Db.connector.project_update_field id, "components", body["components"] | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |           "Updated project '#{project.id}' with components '#{body["components"].inspect}'" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-05 14:54:47 +03:00
										 |  |  |         def add_deploy_env id | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           env = parser.add_deploy_env | 
					
						
							|  |  |  |           env.add_users [parser.current_user] | 
					
						
							|  |  |  |           env.validate! | 
					
						
							|  |  |  |           begin | 
					
						
							|  |  |  |             db_env = project.deploy_env(env.identifier) | 
					
						
							|  |  |  |             raise InvalidRecord.new("Can not add new environment for project '#{id}'. Environment '#{env.identifier}' already exist") | 
					
						
							|  |  |  |           rescue RecordNotFound => e | 
					
						
							|  |  |  |             res = project.add_deploy_env env | 
					
						
							|  |  |  |             return "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'." + res, env | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |         def update_deploy_env_field id, deploy_env, field | 
					
						
							| 
									
										
										
										
											2015-08-14 17:47:18 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |           db_env = project.deploy_env(deploy_env) | 
					
						
							|  |  |  |           value = parser.update_deploy_env_field | 
					
						
							|  |  |  |           if db_env.respond_to?(field + "=") | 
					
						
							|  |  |  |             if field == "identifier" | 
					
						
							| 
									
										
										
										
											2016-07-13 18:48:46 +03:00
										 |  |  |               Devops::Db.connector.change_servers_deploy_env(db_env.identifier, value) | 
					
						
							|  |  |  |               Devops::Db.connector.change_stacks_deploy_env(db_env.identifier, value) | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |               db_env.rename id, value | 
					
						
							|  |  |  |               "Environment '#{deploy_env}' has been renamed to '#{value}'" | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               db_env.update_field(id, field, value) | 
					
						
							|  |  |  |               "Environment's field '#{field}' has been updated" | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             raise RecordNotFound.new("Field '#{field}' does not exist") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def update_deploy_env id, deploy_env | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           db_env = project.deploy_env(deploy_env) | 
					
						
							|  |  |  |           env = parser.update_deploy_env | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           env.identifier = deploy_env if env.identifier.nil? | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |           begin | 
					
						
							| 
									
										
										
										
											2015-09-15 16:05:32 +03:00
										 |  |  |             unless env.identifier == deploy_env | 
					
						
							|  |  |  |               servers = Devops::Db.connector.servers_by_project_and_deploy_env(id, deploy_env) | 
					
						
							| 
									
										
										
										
											2015-10-21 14:38:48 +03:00
										 |  |  |               raise InvalidRecord.new("Environment '#{deploy_env}' can't be updated: it has #{servers.size} running servers.") unless servers.empty? | 
					
						
							| 
									
										
										
										
											2015-09-15 16:05:32 +03:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |             begin | 
					
						
							|  |  |  |               project.deploy_env(env.identifier) | 
					
						
							| 
									
										
										
										
											2015-10-21 14:38:48 +03:00
										 |  |  |               raise InvalidRecord.new("Environment '#{deploy_env}' can't be renamed to '#{env.identifier}', environment '#{env.identifier}' already exists") unless deploy_env == env.identifier | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |             rescue RecordNotFound => e | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |             env.validate! | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |             project.delete_deploy_env(deploy_env) | 
					
						
							|  |  |  |             project.add_deploy_env(env) | 
					
						
							|  |  |  |             "Deploy environment '#{deploy_env}' has been updated in project '#{project.id}'" | 
					
						
							|  |  |  |           rescue RecordNotFound => e | 
					
						
							|  |  |  |             env.identifier = deploy_env | 
					
						
							| 
									
										
										
										
											2015-09-29 13:44:39 +03:00
										 |  |  |             res = project.add_deploy_env env | 
					
						
							|  |  |  |             "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'." + res | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-08-14 17:47:18 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |         def delete_deploy_env id, deploy_env | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           servers = Devops::Db.connector.servers_by_project_and_deploy_env(id, deploy_env) | 
					
						
							|  |  |  |           raise InvalidRecord.new("Can not delete environment '#{deploy_env}', there are #{servers.size} servers on it") unless servers.empty? | 
					
						
							|  |  |  |           project.delete_deploy_env(deploy_env) | 
					
						
							| 
									
										
										
										
											2016-02-24 12:43:46 +03:00
										 |  |  |           "Deploy environment '#{deploy_env}' has been deleted from project '#{project.id}'." | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-24 14:33:02 +03:00
										 |  |  |         # updates only run_list and description | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def update_project id | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           body = parser.update | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           old_project = Devops::Db.connector.project id | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           Devops::Db.connector.project_update id, body | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # TODO: multi project | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def update_project_users id | 
					
						
							|  |  |  |           deploy_env, users = parser.project_users | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-09-22 13:05:04 +03:00
										 |  |  |           Validators::Helpers::Users.new(users).validate! | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project.add_authorized_user users, deploy_env | 
					
						
							| 
									
										
										
										
											2015-09-22 12:49:27 +03:00
										 |  |  |           info = "Users '#{users.join("', '")}' has been added to '#{id}' project's authorized users." | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           info | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # TODO: multi project | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def delete_project_users id | 
					
						
							|  |  |  |           deploy_env, users = parser.project_users | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           project.remove_authorized_user users, deploy_env | 
					
						
							|  |  |  |           "Users '#{users.join("', '")}' have been removed from '#{id}' project's authorized users" | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |         def set_project_run_list id | 
					
						
							|  |  |  |           list = parser.run_list | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           Devops::Db.connector.set_project_run_list id, list | 
					
						
							|  |  |  |           "Updated project with run_list '#{list.inspect}'" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def set_project_env_run_list id, deploy_env | 
					
						
							|  |  |  |           list = parser.run_list | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           env = project.deploy_env deploy_env | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           Devops::Db.connector.set_project_env_run_list id, deploy_env, list | 
					
						
							|  |  |  |           "Updated environment '#{env.identifier}' with run_list '#{list.inspect}' in project '#{project.id}'" | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def delete_project id | 
					
						
							|  |  |  |           deploy_env = parser.delete | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-10-21 15:00:37 +03:00
										 |  |  |           if deploy_env.nil? | 
					
						
							|  |  |  |             servers = Devops::Db.connector.servers id | 
					
						
							|  |  |  |             raise DependencyError.new "Deleting project #{id} is forbidden: Project has servers" unless servers.empty? | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             project.delete | 
					
						
							|  |  |  |             "Project '#{id}' is deleted" | 
					
						
							|  |  |  |           else | 
					
						
							| 
									
										
										
										
											2015-10-21 15:00:37 +03:00
										 |  |  |             servers = Devops::Db.connector.servers id, deploy_env | 
					
						
							|  |  |  |             raise DependencyError.new "Deleting deploy_env #{deploy_env} is forbidden: Project has servers" unless servers.empty? | 
					
						
							| 
									
										
										
										
											2015-09-11 16:18:20 +03:00
										 |  |  |             project.delete_deploy_env(deploy_env) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             "Project '#{id}'. Deploy environment '#{deploy_env}' has been deleted" | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def deploy_project_stream out, id | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           # check if project exist | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           deploy_env, servers = parser.deploy | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           keys = {} | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           dbserver = Devops::Db.connector.servers(id, deploy_env, servers, true) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           out << (dbservers.empty? ? "No reserved servers to deploy\n" : "Deploy servers: '#{dbservers.map{|s| s.chef_node_name}.join("', '")}'\n") | 
					
						
							|  |  |  |           status = [] | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           deploy_info_buf = {} | 
					
						
							|  |  |  |           dbservers.each do |s| | 
					
						
							|  |  |  |             begin | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |               Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             rescue InvalidPrivileges, RecordNotFound  => e | 
					
						
							|  |  |  |               out << e.message + "\n" | 
					
						
							|  |  |  |               status.push 2
 | 
					
						
							|  |  |  |               next | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |             deploy_env_model = project.deploy_env(s.deploy_env) | 
					
						
							|  |  |  |             deploy_info = if deploy_info_buf[s.deploy_env] | 
					
						
							|  |  |  |               deploy_info_buf[s.deploy_env] | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               # мы не можем указать один build_number для всех окружений, поэтому nil | 
					
						
							|  |  |  |               deploy_info_buf[s.deploy_env] = project.deploy_info(deploy_env_model, nil) | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |             status.push(Devops::Executor::ServerExecutor.new(s, out, current_user: parser.current_user).deploy_server(deploy_info)) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |           status | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def deploy_project id | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           # check if project exist | 
					
						
							|  |  |  |           project_model = Devops::Db.connector.project(id) | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           deploy_env, servers = parser.deploy | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           files = [] | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |           dbservers = Devops::Db.connector.servers(id, deploy_env, servers, true) | 
					
						
							|  |  |  |           #out << (dbservers.empty? ? "No reserved servers to deploy\n" : "Deploy servers: '#{dbservers.map{|s| s.chef_node_name}.join("', '")}'\n") | 
					
						
							|  |  |  |           deploy_info_buf = {} | 
					
						
							|  |  |  |           dbservers.each do |s| | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  |             begin | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |               Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             rescue InvalidPrivileges, RecordNotFound  => e | 
					
						
							|  |  |  |               next | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |             deploy_env_model = project_model.deploy_env(s.deploy_env) | 
					
						
							|  |  |  |             deploy_info = if deploy_info_buf[s.deploy_env] | 
					
						
							|  |  |  |               deploy_info_buf[s.deploy_env] | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               # мы не можем указать один build_number для всех окружений, поэтому nil | 
					
						
							|  |  |  |               deploy_info_buf[s.deploy_env] = project_model.deploy_info(deploy_env_model, nil) | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 12:05:07 +03:00
										 |  |  |             jid = Worker.start_async(DeployWorker, | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  |               server_attrs: s.to_hash, | 
					
						
							|  |  |  |               owner: parser.current_user, | 
					
						
							|  |  |  |               tags: [], | 
					
						
							|  |  |  |               deploy_info: deploy_info | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2015-11-03 12:05:07 +03:00
										 |  |  |             files.push jid | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |           files | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def archive_project id | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           Devops::Db.connector.archive_project(id) | 
					
						
							| 
									
										
										
										
											2015-09-29 13:48:35 +03:00
										 |  |  |           msg = "Project '#{id}' has been archived" | 
					
						
							|  |  |  |           DevopsLogger.logger.info msg | 
					
						
							|  |  |  |           msg | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def unarchive_project id | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           Devops::Db.connector.unarchive_project(id) | 
					
						
							| 
									
										
										
										
											2015-09-29 13:48:35 +03:00
										 |  |  |           msg = "Project '#{id}' has been unarchived" | 
					
						
							|  |  |  |           DevopsLogger.logger.info msg | 
					
						
							|  |  |  |           msg | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def test_project id, deploy_env | 
					
						
							|  |  |  |           project = Devops::Db.connector.project(id) | 
					
						
							|  |  |  |           env = project.deploy_env deploy_env | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           DevopsLogger.logger.info "Test project '#{project.id}' and environment '#{env.identifier}'" | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           if env.provider == ::Provider::Static::PROVIDER | 
					
						
							|  |  |  |             msg = "Can not test environment with provider '#{::Provider::Static::PROVIDER}'" | 
					
						
							|  |  |  |             Logger.warn msg | 
					
						
							|  |  |  |             raise InvalidRecord.new(msg) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-03 12:05:07 +03:00
										 |  |  |           jid = Worker.start_async(ProjectTestWorker, | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |             project: project.id, | 
					
						
							|  |  |  |             deploy_env: env.identifier, | 
					
						
							|  |  |  |             user: @request.env['REMOTE_USER'] | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           sleep 1
 | 
					
						
							| 
									
										
										
										
											2015-11-03 12:05:07 +03:00
										 |  |  |           return [jid] | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |         def delete_project_servers(project_id) | 
					
						
							|  |  |  |           env_id, dry_run = parser.delete_project_servers | 
					
						
							|  |  |  |           Devops::Db.connector.project(project_id) | 
					
						
							|  |  |  |           servers = Devops::Db.connector.servers(project_id, env_id) | 
					
						
							|  |  |  |           info = {to_delete: servers.map(&:id)} | 
					
						
							|  |  |  |           if !dry_run | 
					
						
							|  |  |  |             info.merge!(delete_chosen_servers!(servers)) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           info | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def delete_chosen_servers!(servers) | 
					
						
							| 
									
										
										
										
											2016-02-10 17:05:35 +03:00
										 |  |  |           current_user = parser.current_user | 
					
						
							| 
									
										
										
										
											2016-02-02 11:43:13 +03:00
										 |  |  |           reports = servers.map do |server| | 
					
						
							| 
									
										
										
										
											2016-02-10 17:05:35 +03:00
										 |  |  |             Worker.start_async(DeleteServerWorker, 'server_id' => server.id, 'current_user' => current_user) | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2016-02-02 11:43:13 +03:00
										 |  |  |           {reports: reports} | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 |