| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  | require 'db/mongo/models/stack_template/stack_template_factory' | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  | require "app/api2/parsers/stack_template" | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  | require_relative "request_handler" | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |   module API2_0 | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |     module Handler | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |       class StackTemplate < RequestHandler | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         set_parser Devops::API2_0::Parser::StackTemplateParser | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |         def stack_templates | 
					
						
							|  |  |  |           Devops::Db.connector.stack_templates | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |         def stack_templates_for_provider provider | 
					
						
							|  |  |  |           Devops::Db.connector.stack_templates(provider) | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 17:48:07 +03:00
										 |  |  |         def create_stack_template provider | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           body = parser.create | 
					
						
							| 
									
										
										
										
											2015-08-28 17:00:48 +03:00
										 |  |  |           template_model = Model::StackTemplateFactory.create(provider, body) | 
					
						
							| 
									
										
										
										
											2015-09-14 10:22:05 +03:00
										 |  |  |           template_model.owner = parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |           Devops::Db.connector.stack_template_insert(template_model) | 
					
						
							|  |  |  |           template_model | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |         def get_stack_template id | 
					
						
							|  |  |  |           Devops::Db.connector.stack_template(id) | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  |         def delete_stack_template id | 
					
						
							| 
									
										
										
										
											2015-09-16 14:51:29 +03:00
										 |  |  |           envs_with_this_template = envs_using_stack_template(id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           if envs_with_this_template.empty? | 
					
						
							|  |  |  |             Devops::Db.connector.stack_template_delete id | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             raise ConflictException.new("Stack template '#{id}' is already in use in #{envs_with_this_template.join(', ')}") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def envs_using_stack_template(id) | 
					
						
							|  |  |  |           projects = Devops::Db.connector.projects_all | 
					
						
							|  |  |  |           envs_with_this_template = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           projects.each do |project| | 
					
						
							|  |  |  |             project.deploy_envs.each do |env| | 
					
						
							|  |  |  |               next unless  env.respond_to?(:stack_template) | 
					
						
							|  |  |  |               if env.stack_template == id | 
					
						
							|  |  |  |                 envs_with_this_template << "#{project.id}-#{env.identifier}" | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           envs_with_this_template | 
					
						
							| 
									
										
										
										
											2015-04-16 17:54:40 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-07-27 11:14:01 +03:00
										 |  |  | end |