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 048a730..61f0807 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