fluke/devops-service/commands/deploy.rb
2014-10-22 15:01:55 +04:00

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