| 
									
										
										
										
											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 |