require "db/mongo/models/stack/stack_factory" require "lib/puts_and_flush" require_relative "stack_executor/stack_creation_waiter" require_relative "stack_executor/stack_servers_persister" require_relative "stack_executor/prioritized_groups_bootstrapper" module Devops module Executor class StackExecutor include PutsAndFlush attr_reader :out, :stack def initialize(options) @out = options.fetch(:out) @stack = options[:stack] end def wait_till_stack_is_created wait_result = StackCreationWaiter.new(stack, out).sync if wait_result.ok? puts_and_flush "\nStack '#{stack.name}' has been created" true else puts_and_flush "An error ocurred during stack creation: #{wait_result.reason}" false end end def create_stack(stack_attrs) @stack = Devops::Model::StackFactory.create(stack_attrs["provider"], stack_attrs, out) mongo.stack_insert(@stack) end def persist_stack_servers puts_and_flush 'Start saving stack servers into CID database.' persister = StackServersPersister.new(stack, out) persister.persist_new_servers puts_and_flush "Stack servers have been saved." { just_persisted_by_priority: persister.just_persisted_by_priority, deleted: persister.deleted } end def bootstrap_servers_by_priority(servers_by_priorities, jid) PrioritizedGroupsBootstrapper.new(out, jid, servers_by_priorities).bootstrap_servers_by_priority end def delete_stack stack.delete_stack_in_cloud! mongo.stack_servers_delete(stack.name) mongo.stack_delete(stack.id) end private def mongo Devops::Db.connector end end end end