require 'json' require 'lib/stack_presets/factory' require 'workers/stack_sync_worker' module Devops module Version2_0 module Handler class StackPreset def self.get_presets lambda { # check_privileges("stack_presets", "r") json Devops::StackPresetsFactory.list.map(&:to_hash) } end def self.get_preset lambda { # check_privileges("stack_presets", "r") json Devops::StackPresetsFactory.get(params['id']).to_hash } end def self.apply lambda { # check_privileges("stack_presets", "r") check_privileges('stack_template', 'w') attrs = create_object_from_json_body preset = Devops::StackPresetsFactory.get(attrs.fetch('id')) stack = preset.create_stack_from_preset(attrs) settings.mongo.stack_insert(stack) jid = StackSyncWorker.perform_async( DevopsConfig[:report_dir_v2], stack.id, request.env['REMOTE_USER'], # owner DevopsConfig.config ) Worker.set_status jid, Worker::STATUS::IN_QUEUE logger.info "Job '#{jid}' has been started" uri = URI.parse(request.url) uri.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/" + jid file = uri.to_s puts "Syncing report is located here: #{file}" create_response 'Created', stack.to_hash, 201 } end end end end end