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

64 lines
1.8 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.join(', ')}")
end
end
private
2015-09-16 15:07:54 +03:00
#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
2015-07-27 11:14:01 +03:00
end