| 
									
										
										
										
											2015-08-12 09:41:19 +03:00
										 |  |  | require "lib/knife/knife_factory" | 
					
						
							| 
									
										
										
										
											2016-03-01 22:05:25 +03:00
										 |  |  | require "lib/puts_and_flush" | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  | require "hooks" | 
					
						
							| 
									
										
										
										
											2016-03-30 10:11:59 +03:00
										 |  |  | require_relative "server_executor/expiration_scheduler" | 
					
						
							|  |  |  | require_relative 'server_executor/server_operation_result' | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  | require "lib/ssh/ssh_utils" | 
					
						
							|  |  |  | require "exceptions/bootstrap_error" | 
					
						
							|  |  |  | require "exceptions/deploy_error" | 
					
						
							|  |  |  | require "exceptions/deploy_info_error" | 
					
						
							|  |  |  | require "exceptions/creation_error" | 
					
						
							|  |  |  | require "db/mongo/models/image" | 
					
						
							|  |  |  | require "db/mongo/models/server" | 
					
						
							|  |  |  | require "db/mongo/models/key" | 
					
						
							|  |  |  | require "db/mongo/models/project" | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Devops | 
					
						
							|  |  |  |   module Executor | 
					
						
							|  |  |  |     class ServerExecutor | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |       include Hooks | 
					
						
							| 
									
										
										
										
											2016-03-01 22:05:25 +03:00
										 |  |  |       include PutsAndFlush | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       include ServerOperationResultCode | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 12:01:35 +03:00
										 |  |  |       # waiting for 5*60 seconds (5 min) | 
					
						
							|  |  |  |       MAX_SSH_RETRIES_AMOUNT = 60
 | 
					
						
							| 
									
										
										
										
											2015-09-25 17:31:10 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |       define_hook :before_create | 
					
						
							|  |  |  |       define_hook :after_create | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       #params: | 
					
						
							|  |  |  |       #  out - container for output data | 
					
						
							|  |  |  |       define_hook :before_bootstrap | 
					
						
							|  |  |  |       define_hook :after_bootstrap | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       #before_deploy :add_run_list_to_deploy_info | 
					
						
							| 
									
										
										
										
											2015-12-24 18:51:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       attr_accessor :server, :environment, :job_task, :project | 
					
						
							|  |  |  |       attr_reader :out, :current_user | 
					
						
							| 
									
										
										
										
											2015-12-24 18:51:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def initialize server, out, current_user, options={} | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |         if server | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           @project = Devops::Model::Project.find_with_environment(server.project, server.environment) | 
					
						
							|  |  |  |           @environment = @project.environment(server.environment) | 
					
						
							|  |  |  |           @category = @environment.get_category(server.category) | 
					
						
							|  |  |  |           @server = server | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         @out = out | 
					
						
							| 
									
										
										
										
											2015-08-12 12:24:48 +03:00
										 |  |  |         @out.class.send(:define_method, :flush) { } unless @out.respond_to?(:flush) | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @current_user = current_user | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # TODO: refactore attr_accessors to constructor options, | 
					
						
							|  |  |  |       # because these values don't change after object initializing | 
					
						
							|  |  |  |       def job_task= task | 
					
						
							|  |  |  |         @job_task = task | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def project= p | 
					
						
							|  |  |  |         @project = p | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def environment= e | 
					
						
							|  |  |  |         @environment = e | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def server | 
					
						
							|  |  |  |         @server | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def category= category | 
					
						
							|  |  |  |         @category = category | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 14:55:53 +03:00
										 |  |  |       def create_server_object options | 
					
						
							|  |  |  |         Devops::Model::Server.new({ | 
					
						
							|  |  |  |           "project" => @project.id, | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           "environment" => @environment.id, | 
					
						
							|  |  |  |           "category" => @category.id, | 
					
						
							|  |  |  |           "created_by" => @current_user, | 
					
						
							|  |  |  |           "provider" => @category.provider.name, | 
					
						
							|  |  |  |           "provider_account" => @category.provider.account, | 
					
						
							| 
									
										
										
										
											2016-01-27 15:44:59 +03:00
										 |  |  |           "private_ip" => options["private_ip"] | 
					
						
							| 
									
										
										
										
											2015-11-23 14:55:53 +03:00
										 |  |  |         }) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       def create_server options | 
					
						
							| 
									
										
										
										
											2015-11-23 14:55:53 +03:00
										 |  |  |         @server = create_server_object(options) | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @server.set_last_operation(Devops::Model::Server::OperationType::CREATION, @current_user, @job_task.id) | 
					
						
							|  |  |  |         provider = @category.provider | 
					
						
							|  |  |  |         @out.puts "Create server..." | 
					
						
							|  |  |  |         @server.run_list = options["run_list"] || [] | 
					
						
							|  |  |  |         @server.ssh_key = options["ssh_key"] || provider.account_instance.ssh_key | 
					
						
							|  |  |  |         @server.name = options["name"] || @server.provider_instance.create_default_server_name(@server) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         image = Devops::Model::Image.where(image_id: provider.image, provider: provider.name, provider_account: provider.account).first | 
					
						
							|  |  |  |         @server.remote_user = image.remote_user | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res = {} | 
					
						
							|  |  |  |         @out << "\nBefore create hooks...\n" | 
					
						
							|  |  |  |         res[:before] = self.run_hook :before_create | 
					
						
							|  |  |  |         @out << "Done\n" | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @out.puts "Running cloud instance...\nUsing provider '#{provider.name}' and account '#{provider.account}'\n" | 
					
						
							| 
									
										
										
										
											2015-08-12 12:24:48 +03:00
										 |  |  |         @out.flush | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         unless provider.create_server(@server, @out) | 
					
						
							|  |  |  |           raise Devops::Exception::CreationError.new("Can not create server in cloud with provider '#{provider.name}' and account '#{provider.account}'") | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         @server.save | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         provider.waiting_server @server, @out | 
					
						
							|  |  |  |         @server.save | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @out << @server.info | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |         @out.flush | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @out << "\n\nAfter create hooks...\n" | 
					
						
							|  |  |  |         res[:after] = self.run_hook :after_create | 
					
						
							|  |  |  |         @out << "Done\n" | 
					
						
							|  |  |  |         @out.flush | 
					
						
							|  |  |  |         DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running" | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         schedule_expiration() | 
					
						
							|  |  |  |         0
 | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def deploy_info options | 
					
						
							|  |  |  |         @server.set_last_operation(Devops::Model::Server::OperationType::DEPLOY_INFO, @current_user, @job_task.id) | 
					
						
							|  |  |  |         options[:deploy_info] || @project.deploy_info(@environment) | 
					
						
							| 
									
										
										
										
											2015-10-23 14:54:56 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def bootstrap_server options, deploy_info | 
					
						
							|  |  |  |         @server.set_last_operation(Devops::Model::Server::OperationType::BOOTSTRAP, @current_user, @job_task.id) | 
					
						
							|  |  |  | =begin | 
					
						
							|  |  |  | <<<<<<< HEAD | 
					
						
							|  |  |  |             if @project.is_sandbox? | 
					
						
							|  |  |  |               bootstrap_options[:deployers] = [options['created_by']] | 
					
						
							|  |  |  |               bootstrap_options[:deployers] += (options['project_info']['deployers'] || []) if options['project_info'] | 
					
						
							| 
									
										
										
										
											2016-04-14 23:00:39 +03:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  | ======= | 
					
						
							|  |  |  | =end | 
					
						
							| 
									
										
										
										
											2015-08-12 12:24:48 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @job_task.bootstrap_info = @category.cm_tool.bootstrap_instance(@server, deploy_info, @out, options) | 
					
						
							|  |  |  |         @job_task.save | 
					
						
							|  |  |  |         @server.save | 
					
						
							|  |  |  |         DevopsLogger.logger.info "Server #{@server.id} has been bootstraped with cm name '#{@server.cm_name}'" | 
					
						
							|  |  |  |         0
 | 
					
						
							| 
									
										
										
										
											2015-08-12 12:24:48 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def deploy_server options, deploy_info | 
					
						
							|  |  |  |         @server.set_last_operation(Devops::Model::Server::OperationType::DEPLOY, @current_user, @job_task.id) | 
					
						
							|  |  |  |         deploy_info[:run_list] = compute_run_list | 
					
						
							|  |  |  |         @job_task.deploy_info = deploy_info | 
					
						
							|  |  |  |         @job_task.save | 
					
						
							|  |  |  |         @category.cm_tool.deploy_instance(@server, deploy_info, @out) | 
					
						
							|  |  |  |         DevopsLogger.logger.info "Server #{@server.id} has been deployed" | 
					
						
							|  |  |  |         0
 | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def unbootstrap_server | 
					
						
							|  |  |  |         res = @category.cm_tool.delete_instance(@server, @out) | 
					
						
							| 
									
										
										
										
											2015-10-22 13:56:16 +03:00
										 |  |  |         res | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def deploy_server_with_tags tags, deploy_info | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         unless tags.empty? | 
					
						
							|  |  |  |           deploy_info[tags: tags] | 
					
						
							| 
									
										
										
										
											2016-01-14 13:43:42 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @job_task.deploy_info = deploy_info | 
					
						
							|  |  |  |         @job_task.save | 
					
						
							|  |  |  |         r = @category.cm_tool.deploy_instance(@server, deploy_info, @out) | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @server.set_last_operation(Devops::Model::Server::OperationType::DEPLOY, @current_user, @job_task.id) | 
					
						
							|  |  |  |         @server.save | 
					
						
							|  |  |  |         return r | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def delete_server | 
					
						
							|  |  |  |         if @server.static? | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           @out << "'#{@server.id}' is a static server" | 
					
						
							|  |  |  |           @out.flush | 
					
						
							|  |  |  |           unless @server.cm_name.nil? | 
					
						
							|  |  |  |             unbootstrap_server | 
					
						
							| 
									
										
										
										
											2016-03-17 19:32:44 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           @server.delete | 
					
						
							|  |  |  |           msg = "Static server '#{@server.id}' is removed" | 
					
						
							|  |  |  |           DevopsLogger.logger.info msg | 
					
						
							|  |  |  |           return msg, nil | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         puts_and_flush "'#{@server.id}' is not a static server" | 
					
						
							|  |  |  |         puts_and_flush @server.to_hash | 
					
						
							|  |  |  |         @category.cm_tool.delete_instance(@server, @out) | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         provider = @server.provider_instance | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         msg = nil | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         begin | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           msg = provider.delete_server @server | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         rescue Fog::Compute::OpenStack::NotFound, Fog::Compute::AWS::NotFound | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           msg = "Server with id '#{@server.id}' not found in '#{provider.name}' servers" | 
					
						
							|  |  |  |           DevopsLogger.logger.warn msg | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         @out.puts msg | 
					
						
							|  |  |  |         @server.delete | 
					
						
							|  |  |  |         info = "Server '#{@server.id}' with name '#{@server.name}' for project '#{@server.project}-#{@server.environment}' is removed" | 
					
						
							|  |  |  |         puts_and_flush info | 
					
						
							|  |  |  |         DevopsLogger.logger.info info | 
					
						
							|  |  |  |         return 0
 | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def roll_back | 
					
						
							| 
									
										
										
										
											2015-11-06 14:00:24 +03:00
										 |  |  |         @out.puts "Trying to roll back..." | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |         unless @server.id.nil? | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           unless @server.name.nil? | 
					
						
							|  |  |  |             @out.puts "Server '#{@server.name}' with id '#{@server.id}' is not created" | 
					
						
							|  |  |  |             @category.cm_tool.delete_instance(@server, @out) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |           begin | 
					
						
							| 
									
										
										
										
											2015-11-06 14:00:24 +03:00
										 |  |  |             @out.puts @server.provider_instance.delete_server(@server) | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |           rescue => e | 
					
						
							| 
									
										
										
										
											2015-11-06 14:00:24 +03:00
										 |  |  |             @out.puts e.message | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |           @out << "\nRolled back\n" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-19 17:00:21 +03:00
										 |  |  |       def add_run_list_to_deploy_info out, deploy_info | 
					
						
							| 
									
										
										
										
											2015-08-21 15:17:42 +03:00
										 |  |  |         out << "\nGenerate run list hook...\n" | 
					
						
							| 
									
										
										
										
											2015-09-11 12:22:58 +03:00
										 |  |  |         if deploy_info["run_list"] | 
					
						
							| 
									
										
										
										
											2015-09-30 17:05:52 +03:00
										 |  |  |           out << "Deploy info already contains 'run_list': #{deploy_info["run_list"].join(", ")}\n" | 
					
						
							| 
									
										
										
										
											2015-09-11 12:22:58 +03:00
										 |  |  |           return | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-08-21 15:17:42 +03:00
										 |  |  |         out << "Project run list: #{@project.run_list.join(", ")}\n" | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         out << "Deploy environment run list: #{@environment.run_list.join(", ")}\n" | 
					
						
							| 
									
										
										
										
											2015-08-21 15:17:42 +03:00
										 |  |  |         out << "Server run list: #{@server.run_list.join(", ")}\n" | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |         deploy_info["run_list"] = compute_run_list | 
					
						
							| 
									
										
										
										
											2015-08-21 15:17:42 +03:00
										 |  |  |         out << "New deploy run list: #{deploy_info["run_list"].join(", ")}\nRun list has been generated\n\n" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |       def compute_run_list | 
					
						
							| 
									
										
										
										
											2015-10-01 22:41:35 +03:00
										 |  |  |         rlist = [] | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         [@server.provider_instance.run_list, @project.run_list, @environment.run_list, @server.run_list].each do |sub_run_list| | 
					
						
							|  |  |  |           rlist += sub_run_list if sub_run_list.is_a?(Array) | 
					
						
							| 
									
										
										
										
											2015-10-01 22:41:35 +03:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |         if @server.stack | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |           #TODO | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |           stack = Devops::Db.connector.stack(@server.stack) | 
					
						
							| 
									
										
										
										
											2015-10-01 22:41:35 +03:00
										 |  |  |           srl = stack.run_list | 
					
						
							| 
									
										
										
										
											2016-01-19 17:00:21 +03:00
										 |  |  |           rlist += srl if srl | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-01-19 17:00:21 +03:00
										 |  |  |         rlist.uniq | 
					
						
							| 
									
										
										
										
											2015-10-01 17:27:04 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       def waiting_ssh | 
					
						
							|  |  |  |         ip = @server.private_ip | 
					
						
							|  |  |  |         unless @server.public_ip.nil? | 
					
						
							|  |  |  |           ip = server.public_ip | 
					
						
							|  |  |  |           @out.puts "\nPublic IP is present" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         @out << "Waiting for SSH" | 
					
						
							|  |  |  |         k = Devops::Model::Key.find(@server.ssh_key) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         retries_amount = 0
 | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |           sleep(5) | 
					
						
							|  |  |  |           res = Devops::SSH::Utils.try_ssh(ip, @server.remote_user, k.path) | 
					
						
							|  |  |  |           if res | 
					
						
							|  |  |  |             @out.puts "\n" | 
					
						
							|  |  |  |             @out.flush | 
					
						
							|  |  |  |             return true | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             retries_amount += 1
 | 
					
						
							|  |  |  |             if retries_amount > MAX_SSH_RETRIES_AMOUNT | 
					
						
							|  |  |  |               raise Devops::Exception::BootstrapError.new("Can not connect to #{@server.remote_user}@#{ip}") | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |             raise ArgumentError.new | 
					
						
							| 
									
										
										
										
											2016-07-22 17:00:05 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         rescue ArgumentError => e | 
					
						
							|  |  |  |           @out << "." | 
					
						
							|  |  |  |           @out.flush | 
					
						
							|  |  |  |           retry | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-07-22 17:00:05 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-03 17:03:47 +03:00
										 |  |  |       private | 
					
						
							| 
									
										
										
										
											2016-01-20 01:43:34 +03:00
										 |  |  |       def schedule_expiration | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |         if @environment.expires | 
					
						
							|  |  |  |           job_id = ExpirationScheduler.new(@environment.expires, @server).schedule_expiration! | 
					
						
							|  |  |  |           puts_and_flush "Planning expiration in #{@environment.expires}, job_id: #{job_id}" | 
					
						
							| 
									
										
										
										
											2015-09-15 19:54:43 +03:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |