82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'db/mongo/models/stack_template/stack_template_factory'
 | |
| require "app/api2/parsers/stack_template"
 | |
| require_relative "request_handler"
 | |
| 
 | |
| module Devops
 | |
|   module API2_0
 | |
|     module Handler
 | |
|       class StackTemplate < RequestHandler
 | |
| 
 | |
|         set_parser Devops::API2_0::Parser::StackTemplateParser
 | |
| 
 | |
|         def stack_templates
 | |
|           Devops::Db.connector.stack_templates
 | |
|         end
 | |
| 
 | |
|         def stack_templates_for_provider provider
 | |
|           Devops::Db.connector.stack_templates(provider)
 | |
|         end
 | |
| 
 | |
|         def create_stack_template provider
 | |
|           body = parser.create
 | |
|           template_model = Model::StackTemplateFactory.create(provider, body)
 | |
|           template_model.owner = parser.current_user
 | |
|           Devops::Db.connector.stack_template_insert(template_model)
 | |
|           template_model
 | |
|         end
 | |
| 
 | |
|         def get_stack_template id
 | |
|           Devops::Db.connector.stack_template(id)
 | |
|         end
 | |
| 
 | |
|         def delete_stack_template id
 | |
|           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.map{|project, envs| "#{project}: #{envs.join(', ')}"}.join('; ')}", {projects: envs_with_this_template})
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         # temp solution to update url on existing stacks
 | |
|         def update_template_url(id)
 | |
|           template = Devops::Db.connector.stack_template(id)
 | |
|           template.update_template_url
 | |
|           Devops::Db.connector.stack_template_update(template)
 | |
|           template
 | |
|         end
 | |
| 
 | |
|         def update_available_parameters(id)
 | |
|           template = Devops::Db.connector.stack_template(id)
 | |
|           template.available_parameters = template.parse_parameters
 | |
|           Devops::Db.connector.stack_template_update(template)
 | |
|           template
 | |
|         end
 | |
| 
 | |
|         private
 | |
| 
 | |
|         # returns:
 | |
|         # {
 | |
|         #   "project" => ["deploy_env"]
 | |
|         # }
 | |
|         def envs_using_stack_template(id)
 | |
|           projects = Devops::Db.connector.projects_and_deploy_envs_by_field('stack_template', id)
 | |
|           envs_with_this_template = []
 | |
|           res = {}
 | |
| 
 | |
|           projects.each do |project|
 | |
|             array = []
 | |
|             res[project.id] = array
 | |
|             project.deploy_envs.each do |env|
 | |
|               array << env.identifier
 | |
|             end
 | |
|           end
 | |
|           res
 | |
|         end
 | |
| 
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
