From da2a68f4514dd0eee69e14357f280f3bd9a8aafa Mon Sep 17 00:00:00 2001 From: Anton Martynov Date: Tue, 3 Nov 2015 13:08:31 +0300 Subject: [PATCH] #855: cid:priority --- devops-service/providers/ec2.rb | 1 + .../workers/stack_bootstrap_worker.rb | 63 ++++++++++++------- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/devops-service/providers/ec2.rb b/devops-service/providers/ec2.rb index 40fb10b..80925dc 100644 --- a/devops-service/providers/ec2.rb +++ b/devops-service/providers/ec2.rb @@ -323,6 +323,7 @@ module Provider 'key_name' => instance["keyName"], 'private_ip' => instance["privateIpAddress"], 'public_ip' => instance["ipAddress"], + 'tags' => instance["tagSet"] } end end diff --git a/devops-service/workers/stack_bootstrap_worker.rb b/devops-service/workers/stack_bootstrap_worker.rb index e803b08..cc98b19 100644 --- a/devops-service/workers/stack_bootstrap_worker.rb +++ b/devops-service/workers/stack_bootstrap_worker.rb @@ -26,9 +26,15 @@ class StackBootstrapWorker < Worker return 1 end + #TODO: errors begin - servers = persist_stack_servers!(stack) - bootstrap_servers!(servers, report) unless without_bootstrap + servers_with_priority = persist_stack_servers!(stack) + unless without_bootstrap + sorted_keys = servers_with_priority.keys.sort{|x,y| y <=> x} + sorted_keys.each do |key| + bootstrap_servers!(servers_with_priority[key], report) + end + end rescue BootstrapingStackServerError @out.puts "\nAn error occured during bootstraping stack servers. Initiating stack rollback." rollback_stack!(stack) @@ -75,7 +81,7 @@ class StackBootstrapWorker < Worker def bootstrap_servers!(servers, report) @out << "\nStart bootstraping stack servers\n" - report.subreports = subreports = [] + subreports = [] data = {} servers.each do |server| sjid = Worker.start_async(BootstrapWorker, @@ -153,6 +159,10 @@ class StackBootstrapWorker < Worker report end + # returns + # { + # "priority" => [Servers] + # } def persist_stack_servers!(stack) @out.puts "Start syncing stack servers with CID" @out.flush @@ -160,30 +170,37 @@ class StackBootstrapWorker < Worker deploy_env = project.deploy_env(stack.deploy_env) provider = stack.provider_instance - servers = provider.stack_servers(stack).map do |extended_info| - server_attrs = { - 'provider' => provider.name, - 'project' => project.id, - 'deploy_env' => deploy_env.identifier, - 'remote_user' => mongo.image(deploy_env.image).remote_user, - 'key' => extended_info["key_name"] || provider.ssh_key, - '_id' => extended_info["id"], - 'chef_node_name' => extended_info["name"], - 'private_ip' => extended_info["private_ip"], - 'public_ip' => extended_info["public_ip"], - 'created_by' => stack.owner, - 'run_list' => stack.run_list || [], - 'stack' => stack.name - } + stack_servers_info = provider.stack_servers(stack).group_by{|info| info["tags"]["cid:priority"] || 0} + stack_servers_with_priority = {} + stack_servers_info.each do |priority, info_array| + stack_servers_with_priority[priority] = info_array.map do |extended_info| + server_attrs = { + 'provider' => provider.name, + 'project' => project.id, + 'deploy_env' => deploy_env.identifier, + 'remote_user' => mongo.image(deploy_env.image).remote_user, + 'key' => extended_info["key_name"] || provider.ssh_key, + '_id' => extended_info["id"], + 'chef_node_name' => extended_info["name"], + 'private_ip' => extended_info["private_ip"], + 'public_ip' => extended_info["public_ip"], + 'created_by' => stack.owner, + 'run_list' => stack.run_list || [], + 'stack' => stack.name + } - server = ::Devops::Model::Server.new(server_attrs) - mongo.server_insert(server) - # server.chef_node_name = provider.create_default_chef_node_name(server) - server + server = ::Devops::Model::Server.new(server_attrs) + mongo.server_insert(server) + # server.chef_node_name = provider.create_default_chef_node_name(server) + server + end end @out.puts "Stack servers have been synced with CID" + stack_servers_info.each do |priority, servers| + @out.puts "Priority '#{priority}': #{servers.map(&:id).join(", ")}" + end @out.flush - servers + stack_servers_with_priority end end