From 8f23862ef45f2756bac98afd285b2be4c9181abd Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Tue, 19 Apr 2016 19:41:29 +0300 Subject: [PATCH] CID-472: fix ordering issues in name builder --- .../stack_executor/chef_node_name_builder.rb | 11 ++++++++--- .../stack_executor/chef_node_name_builder_spec.rb | 10 +++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/devops-service/lib/executors/stack_executor/chef_node_name_builder.rb b/devops-service/lib/executors/stack_executor/chef_node_name_builder.rb index a774a88..7578ad0 100644 --- a/devops-service/lib/executors/stack_executor/chef_node_name_builder.rb +++ b/devops-service/lib/executors/stack_executor/chef_node_name_builder.rb @@ -63,9 +63,14 @@ class Devops::Executor::StackExecutor end def increment_variable_value(variable_name) - used_values = @already_used_incrementers_values[variable_name] || [] - prev_value = used_values.sort.detect {|t| !used_values.include?(t+1)} - @incrementers_values[variable_name] = prev_value.to_i + 1 + used_values = (@already_used_incrementers_values[variable_name] || []).map(&:to_i) + if !used_values || used_values.empty? + next_value = 1 + else + next_value = (1..used_values.size).detect {|i| !used_values.include?(i) } + next_value ||= used_values.size + 1 + end + @incrementers_values[variable_name] = next_value end end end \ No newline at end of file diff --git a/devops-service/spec/executors/stack_executor/chef_node_name_builder_spec.rb b/devops-service/spec/executors/stack_executor/chef_node_name_builder_spec.rb index 87bc3fa..ddac1f6 100644 --- a/devops-service/spec/executors/stack_executor/chef_node_name_builder_spec.rb +++ b/devops-service/spec/executors/stack_executor/chef_node_name_builder_spec.rb @@ -63,8 +63,7 @@ class Devops::Executor::StackExecutor it "continues with next values if hash isn't empty" do set_mask('node-:increment-slave:') expect( builder_with_incrementers('slave' => []).build_node_name ).to eq 'node-01' - expect( builder_with_incrementers('slave' => [1]).build_node_name ).to eq 'node-02' - expect( builder_with_incrementers('slave' => [50]).build_node_name ).to eq 'node-51' + expect( builder_with_incrementers('slave' => [1,2]).build_node_name ).to eq 'node-03' end it 'uses missed value' do @@ -72,6 +71,11 @@ class Devops::Executor::StackExecutor expect( builder_with_incrementers('slave' => [1,2,4]).build_node_name ).to eq 'node-03' end + it 'uses missed value at the beginning of sequence' do + set_mask('node-:increment-slave:') + expect( builder_with_incrementers('slave' => [3]).build_node_name ).to eq 'node-01' + end + it 'properly recognize floats that may come from mongo' do set_mask('node-:increment-slave:') expect( builder_with_incrementers('slave' => [1.0]).build_node_name ).to eq 'node-02' @@ -79,7 +83,7 @@ class Devops::Executor::StackExecutor it 'could substitute different incrementers at once' do set_mask('node-:increment-slave:-:increment-master:') - expect( builder_with_incrementers('slave' => [1], 'master' => [3]).build_node_name ).to eq 'node-02-04' + expect( builder_with_incrementers('slave' => [1], 'master' => [1,2,3]).build_node_name ).to eq 'node-02-04' end end