2015-04-16 17:54:40 +03:00
|
|
|
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"
|
2015-04-16 17:54:40 +03:00
|
|
|
|
|
|
|
|
module Devops
|
2015-07-27 11:14:01 +03:00
|
|
|
module API2_0
|
2015-04-16 17:54:40 +03:00
|
|
|
module Handler
|
2015-07-27 11:14:01 +03:00
|
|
|
class StackTemplate < RequestHandler
|
2015-04-16 17:54:40 +03:00
|
|
|
|
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
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-27 11:14:01 +03:00
|
|
|
def stack_templates_for_provider provider
|
|
|
|
|
Devops::Db.connector.stack_templates(provider)
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-08-14 17:48:07 +03:00
|
|
|
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
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-27 11:14:01 +03:00
|
|
|
def get_stack_template id
|
|
|
|
|
Devops::Db.connector.stack_template(id)
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-27 11:14:01 +03:00
|
|
|
def delete_stack_template id
|
2015-09-16 14:51:29 +03:00
|
|
|
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
|
|
|
|
|
|
2015-09-16 15:07:54 +03:00
|
|
|
#TODO: projects and env should be returned from mongo
|
2015-09-16 14:51:29 +03:00
|
|
|
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
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-07-27 11:14:01 +03:00
|
|
|
end
|