fluke/devops-service/app/api2/handlers/stack_template.rb

67 lines
1.9 KiB
Ruby
Raw Normal View History

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"
module Devops
2015-07-27 11:14:01 +03:00
module API2_0
module Handler
2015-07-27 11:14:01 +03:00
class StackTemplate < RequestHandler
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
end
2015-07-27 11:14:01 +03:00
def stack_templates_for_provider provider
Devops::Db.connector.stack_templates(provider)
end
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
end
2015-07-27 11:14:01 +03:00
def get_stack_template id
Devops::Db.connector.stack_template(id)
end
2015-07-27 11:14:01 +03:00
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
private
# returns:
# {
# "project" => ["deploy_env"]
# }
def envs_using_stack_template(id)
2015-09-24 15:37:11 +03:00
projects = Devops::Db.connector.projects_and_deploy_envs_by_field('stack_template', id)
envs_with_this_template = []
res = {}
projects.each do |project|
array = []
2015-10-22 14:33:31 +03:00
res[project.id] = array
project.deploy_envs.each do |env|
array << env.identifier
end
end
res
end
end
end
end
2015-07-27 11:14:01 +03:00
end