fluke/devops-service/app/api2/handlers/stack_template.rb
Anton Martynov 136e205056 TODO:
2015-09-16 15:07:54 +03:00

64 lines
1.8 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.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