fluke/devops-service/lib/executors/stack_executor.rb
2016-03-30 12:57:24 +03:00

66 lines
1.9 KiB
Ruby

require "db/mongo/models/stack/stack_factory"
require "lib/puts_and_flush"
module Devops; module Executor; class StackExecutor; end; end; end # predeclare for visibility
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