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.join(', ')}") end end private #TODO: projects and env should be returned from mongo 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 end end end end end