| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | require "commands/knife_commands" | 
					
						
							|  |  |  | require "commands/ssh" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | module DeployCommands | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |   def deploy_server_proc | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |     lambda do |out, s, mongo, tags, deploy_info| | 
					
						
							|  |  |  |       old_tags_str = nil | 
					
						
							|  |  |  |       new_tags_str = nil | 
					
						
							|  |  |  |       unless tags.empty? | 
					
						
							|  |  |  |         old_tags_str = KnifeCommands.tags_list(s.chef_node_name).join(" ") | 
					
						
							|  |  |  |         out << "Server tags: #{old_tags_str}\n" | 
					
						
							|  |  |  |         KnifeCommands.tags_delete(s.chef_node_name, old_tags_str) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         new_tags_str = tags.join(" ") | 
					
						
							|  |  |  |         out << "Server new tags: #{new_tags_str}\n" | 
					
						
							|  |  |  |         cmd = KnifeCommands.tags_create(s.chef_node_name, new_tags_str) | 
					
						
							|  |  |  |         unless cmd[1] | 
					
						
							|  |  |  |           m = "Error: Cannot add tags '#{new_tags_str}' to server '#{s.chef_node_name}'" | 
					
						
							|  |  |  |           DevopsLogger.logger.error(m) | 
					
						
							|  |  |  |           out << m + "\n" | 
					
						
							|  |  |  |           return 3
 | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         DevopsLogger.logger.info("Set tags for '#{s.chef_node_name}': #{new_tags_str}") | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |       k = mongo.key s.key | 
					
						
							|  |  |  |       r = deploy_server out, s, k.path, deploy_info | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |       unless tags.empty? | 
					
						
							|  |  |  |         out << "Restore tags\n" | 
					
						
							|  |  |  |         cmd = KnifeCommands.tags_delete(s.chef_node_name, new_tags_str) | 
					
						
							|  |  |  |         DevopsLogger.logger.info("Deleted tags for #{s.chef_node_name}: #{new_tags_str}") | 
					
						
							|  |  |  |         cmd = KnifeCommands.tags_create(s.chef_node_name, old_tags_str) | 
					
						
							|  |  |  |         DevopsLogger.logger.info("Set tags for #{s.chef_node_name}: #{old_tags_str}") | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |       return r | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |   def deploy_server out, server, cert_path, deploy_info | 
					
						
							|  |  |  |     out << "Before deploy hooks...\n" | 
					
						
							|  |  |  |     res = server.run_hook(:before_deploy, out, deploy_info) | 
					
						
							|  |  |  |     out << "Done\n" | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |     out << "\nRun chef-client on '#{server.chef_node_name}'\n" | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |     cmd = "chef-client --no-color" | 
					
						
							|  |  |  |     if deploy_info["use_json_file"] | 
					
						
							|  |  |  |       deploy_info.delete["use_json_file"] | 
					
						
							|  |  |  |       out << "Build information:\n" | 
					
						
							|  |  |  |       json = JSON.pretty_generate(deploy_info) | 
					
						
							|  |  |  |       out << json | 
					
						
							|  |  |  |       out << "\n" | 
					
						
							|  |  |  |       file = "#{server.project}_#{server.deploy_env}_#{Time.new.to_i}" | 
					
						
							|  |  |  |       dir = DevopsConfig.config[:project_info_dir] | 
					
						
							|  |  |  |       File.open(File.join(dir, file), "w") do |f| | 
					
						
							|  |  |  |         f.write json | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       out.flush if out.respond_to?(:flush) | 
					
						
							|  |  |  |       cmd << " -j http://#{DevopsConfig.config[:address]}:#{DevopsConfig.config[:port]}/#{DevopsConfig.config[:url_prefix]}/v2.0/chef/client/data/#{file}" | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |     ip = if server.public_ip.nil? | 
					
						
							|  |  |  |       server.private_ip | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       out << "Public IP detected\n" | 
					
						
							|  |  |  |       server.public_ip | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  |     out.flush if out.respond_to?(:flush) | 
					
						
							|  |  |  |     lline = KnifeCommands.ssh_stream(out, cmd, ip, server.remote_user, cert_path) | 
					
						
							|  |  |  |     r = /Chef\sClient\sfinished/i | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |     if lline[r].nil? | 
					
						
							|  |  |  |       1
 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       out << "After deploy hooks...\n" | 
					
						
							|  |  |  |       res = server.run_hook(:after_deploy, out, deploy_info) | 
					
						
							|  |  |  |       out << "Done\n" | 
					
						
							|  |  |  |       0
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |