fluke/devops-service/app/api2/handlers/stack_template.rb
2016-01-28 18:15:06 +03:00

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