2016-03-30 12:05:59 +03:00
|
|
|
require "db/mongo/models/stack/stack_factory"
|
|
|
|
|
require "lib/puts_and_flush"
|
2016-03-30 12:57:24 +03:00
|
|
|
module Devops; module Executor; class StackExecutor; end; end; end # predeclare for visibility
|
2016-03-30 12:05:59 +03:00
|
|
|
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
|