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
2015-10-20 16:12:50 +03:00
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 } )
2015-09-16 14:51:29 +03:00
end
end
2016-01-27 15:44:59 +03:00
# 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
2016-01-28 18:15:06 +03:00
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
2015-09-16 14:51:29 +03:00
private
2015-10-20 16:12:50 +03:00
# returns:
# {
# "project" => ["deploy_env"]
# }
2015-09-16 14:51:29 +03:00
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 )
2015-09-16 14:51:29 +03:00
envs_with_this_template = [ ]
2015-10-20 16:12:50 +03:00
res = { }
2015-09-16 14:51:29 +03:00
projects . each do | project |
2015-10-20 16:12:50 +03:00
array = [ ]
2015-10-22 14:33:31 +03:00
res [ project . id ] = array
2015-09-16 14:51:29 +03:00
project . deploy_envs . each do | env |
2015-10-20 16:12:50 +03:00
array << env . identifier
2015-09-16 14:51:29 +03:00
end
end
2015-10-20 16:12:50 +03:00
res
2015-04-16 17:54:40 +03:00
end
end
end
end
2015-07-27 11:14:01 +03:00
end