| 
									
										
										
										
											2015-07-23 12:54:36 +03:00
										 |  |  | require "commands/server" | 
					
						
							|  |  |  | require 'commands/commands_storage' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  | module StackCommands | 
					
						
							| 
									
										
										
										
											2015-07-23 12:54:36 +03:00
										 |  |  |   include ServerCommands | 
					
						
							|  |  |  |   extend self | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def sync_stack_till_not_in_progress_proc | 
					
						
							|  |  |  |     lambda do |out, stack, mongo| | 
					
						
							| 
									
										
										
										
											2015-07-23 12:54:36 +03:00
										 |  |  |       # two tries each 2 seconds, then 5 tries each 10 seconds, then 5 tries each minute. | 
					
						
							|  |  |  |       sleep_times = [2]*2 + [10]*5 + [60]*5
 | 
					
						
							| 
									
										
										
										
											2015-07-21 17:13:10 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  |       begin | 
					
						
							| 
									
										
										
										
											2015-07-21 17:13:10 +03:00
										 |  |  |         out << "Syncing stack '#{stack.id}'...\n" | 
					
						
							|  |  |  |         sleep_times.each do |sleep_time| | 
					
						
							|  |  |  |           sleep sleep_time | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  |           stack.sync_details! | 
					
						
							|  |  |  |           if stack.stack_status != 'CREATE_IN_PROGRESS' | 
					
						
							|  |  |  |             mongo.stack_update(stack) | 
					
						
							|  |  |  |             out << "Stack '#{stack.id}' status is now #{stack.stack_status}" | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-07-21 17:13:10 +03:00
										 |  |  |           out << "Next try...\n" | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  |         end | 
					
						
							|  |  |  |       rescue StandardError => e | 
					
						
							|  |  |  |         logger.error e.message | 
					
						
							|  |  |  |         return 5
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-23 12:54:36 +03:00
										 |  |  |   def create_devops_servers_from_stack_resources | 
					
						
							|  |  |  |     lambda do |out, stack, mongo, owner| | 
					
						
							|  |  |  |       project = mongo.project(stack.project) | 
					
						
							|  |  |  |       deploy_env = project.deploy_envs.detect {|env| env.identifier == stack.deploy_env} | 
					
						
							|  |  |  |       provider = ::Provider::ProviderFactory.get(stack.provider) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       stack.resources.each do |resource| | 
					
						
							|  |  |  |         logical_name = resource['resource_name'] | 
					
						
							|  |  |  |         attrs = stack.resource(logical_name) | 
					
						
							|  |  |  |         body = { | 
					
						
							|  |  |  |           'name' => logical_name, | 
					
						
							|  |  |  |           'key' => attrs['key_name'] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         server = extract_servers(provider, project, deploy_env, body, owner, mongo) | 
					
						
							|  |  |  |         server.private_ip = attrs['addresses']['devops-net-1'].first['addr'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   CommandsStorage.add_job_lambda( | 
					
						
							|  |  |  |     sync_stack_till_not_in_progress: sync_stack_till_not_in_progress_proc, | 
					
						
							|  |  |  |     create_devops_servers_from_stack_resources: create_devops_servers_from_stack_resources | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-20 18:59:26 +03:00
										 |  |  | end |