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
|