| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  | require 'lib/executors/stack_executor' | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 13:18:55 +03:00
										 |  |  | class StackBootstrapWorker < Worker | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-04 13:17:07 +03:00
										 |  |  |   # @options: | 
					
						
							|  |  |  |   #   'stack_attributes', required | 
					
						
							|  |  |  |   #   'without_bootstrap', optional. false by default | 
					
						
							|  |  |  |   #   'skip_rollback', optional. false by default | 
					
						
							| 
									
										
										
										
											2015-07-23 12:54:36 +03:00
										 |  |  |   def perform(options) | 
					
						
							| 
									
										
										
										
											2016-02-10 20:39:49 +03:00
										 |  |  |     call do | 
					
						
							| 
									
										
										
										
											2016-04-04 13:17:07 +03:00
										 |  |  |       puts_and_flush JSON.pretty_generate(options) | 
					
						
							| 
									
										
										
										
											2016-02-10 20:39:49 +03:00
										 |  |  |       stack_attrs = options.fetch('stack_attributes') | 
					
						
							| 
									
										
										
										
											2016-04-04 13:17:07 +03:00
										 |  |  |       without_bootstrap = options['without_bootstrap'] || false | 
					
						
							|  |  |  |       skip_rollback = options['skip_rollback'] || false | 
					
						
							| 
									
										
										
										
											2015-09-24 15:06:02 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-10 20:39:49 +03:00
										 |  |  |       save_report(stack_attrs) | 
					
						
							| 
									
										
										
										
											2015-09-01 16:31:31 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-15 17:05:50 +03:00
										 |  |  |       @stack = executor.create_stack(stack_attrs) | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |       if !executor.wait_till_stack_is_created | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |         puts_and_flush "Stack creating error" | 
					
						
							| 
									
										
										
										
											2016-03-25 14:50:22 +03:00
										 |  |  |         return 1
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       begin | 
					
						
							| 
									
										
										
										
											2016-04-04 13:17:07 +03:00
										 |  |  |         executor.persist_new_servers | 
					
						
							| 
									
										
										
										
											2016-04-15 17:05:50 +03:00
										 |  |  |         @stack.unlock_persisting! | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |         if without_bootstrap | 
					
						
							| 
									
										
										
										
											2016-04-05 21:15:51 +03:00
										 |  |  |           puts_and_flush "\n\nBootstrap has been skipped. Stack has been successfully created." | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |           0
 | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           bootstrap_or_rollback_if_failed(skip_rollback: skip_rollback) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-03-25 14:50:22 +03:00
										 |  |  |       rescue StandardError => e | 
					
						
							|  |  |  |         puts_and_flush "\nAn error occured." | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |         rollback_stack! unless skip_rollback | 
					
						
							| 
									
										
										
										
											2016-03-25 14:50:22 +03:00
										 |  |  |         raise e | 
					
						
							| 
									
										
										
										
											2015-08-12 12:24:48 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-07-30 02:14:45 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |   def executor | 
					
						
							|  |  |  |     @executor ||= Devops::Executor::StackExecutor.new(out: out) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def bootstrap_or_rollback_if_failed(options) | 
					
						
							| 
									
										
										
										
											2016-04-04 13:17:07 +03:00
										 |  |  |     bootstrap_result = executor.bootstrap_just_persisted(jid) | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |     puts_and_flush Devops::Messages.t("worker.stack_bootstrap.bootstrap_result.#{bootstrap_result.reason}") | 
					
						
							|  |  |  |     if bootstrap_result.bootstrap_error? && !options[:skip_rollback] | 
					
						
							|  |  |  |       rollback_stack! | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     bootstrap_result.code | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-30 12:05:59 +03:00
										 |  |  |   def rollback_stack! | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |     puts_and_flush "\nStart rollback of a stack" | 
					
						
							| 
									
										
										
										
											2016-04-15 15:51:52 +03:00
										 |  |  |     executor.delete_stack | 
					
						
							|  |  |  |     puts_and_flush "Stack rollback has been completed" | 
					
						
							| 
									
										
										
										
											2015-09-01 16:31:31 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-10 20:39:49 +03:00
										 |  |  |   def save_report(stack_attrs) | 
					
						
							|  |  |  |     update_report( | 
					
						
							| 
									
										
										
										
											2015-09-01 16:31:31 +03:00
										 |  |  |       "created_by" => stack_attrs['owner'], | 
					
						
							|  |  |  |       "project" => stack_attrs["project"], | 
					
						
							|  |  |  |       "deploy_env" => stack_attrs["deploy_env"], | 
					
						
							| 
									
										
										
										
											2015-11-05 16:47:12 +03:00
										 |  |  |       "type" => ::Devops::Model::Report::STACK_TYPE, | 
					
						
							|  |  |  |       "subreports" => [], | 
					
						
							|  |  |  |       "stack" => stack_attrs['name'] | 
					
						
							| 
									
										
										
										
											2015-09-01 16:31:31 +03:00
										 |  |  |     ) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  | end |