62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "commands/knife_commands"
 | |
| require "commands/ssh"
 | |
| 
 | |
| module DeployCommands
 | |
| 
 | |
|   def deploy_server_proc
 | |
|     lambda do |out, s, mongo, tags|
 | |
|       begin
 | |
|         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}'"
 | |
|             logger.error(m)
 | |
|             out << m + "\n"
 | |
|             return 3
 | |
|           end
 | |
|           logger.info("Set tags for '#{s.chef_node_name}': #{new_tags_str}")
 | |
|         end
 | |
| 
 | |
|         k = mongo.key s.key
 | |
|         r = deploy_server out, s, k.path
 | |
| 
 | |
|         unless tags.empty?
 | |
|           out << "Restore tags\n"
 | |
|           cmd = KnifeCommands.tags_delete(s.chef_node_name, new_tags_str)
 | |
|           logger.info("Deleted tags for #{s.chef_node_name}: #{new_tags_str}")
 | |
|           cmd = KnifeCommands.tags_create(s.chef_node_name, old_tags_str)
 | |
|           logger.info("Set tags for #{s.chef_node_name}: #{old_tags_str}")
 | |
|         end
 | |
|         return r
 | |
|       rescue IOError => e
 | |
|         logger.error e.message
 | |
|         return 4
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def deploy_server out, server, cert_path
 | |
|     out << "\nRun chef-client on '#{server.chef_node_name}'\n"
 | |
|     cmd = "chef-client"
 | |
|     ip = if server.public_ip.nil?
 | |
|       server.private_ip
 | |
|     else
 | |
|       out << "Public IP detected\n"
 | |
|       server.public_ip
 | |
|     end
 | |
|     out.flush if out.respond_to?(:flush)
 | |
|     lline = KnifeCommands.ssh_stream(out, cmd, ip, server.remote_user, cert_path)
 | |
|     r = /Chef\sClient\sfinished/i
 | |
|     return (lline[r].nil? ? 1 : 0)
 | |
|   end
 | |
| 
 | |
| end
 | 
