82 lines
2.7 KiB
Ruby
82 lines
2.7 KiB
Ruby
require "commands/knife_commands"
|
|
require "commands/ssh"
|
|
|
|
module DeployCommands
|
|
|
|
def deploy_server_proc
|
|
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
|
|
end
|
|
DevopsLogger.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, deploy_info
|
|
|
|
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}")
|
|
end
|
|
return r
|
|
end
|
|
end
|
|
|
|
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"
|
|
out << "\nRun chef-client on '#{server.chef_node_name}'\n"
|
|
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/deploy/data/#{file}"
|
|
end
|
|
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
|
|
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
|
|
|
|
end
|
|
|
|
end
|