diff --git a/app/models/service_orchestration/provision_tagging.rb b/app/models/service_orchestration/provision_tagging.rb index 96a17d3bbea..4ecd34a3978 100644 --- a/app/models/service_orchestration/provision_tagging.rb +++ b/app/models/service_orchestration/provision_tagging.rb @@ -1,5 +1,5 @@ module ServiceOrchestration::ProvisionTagging - DIALOG_TAG_KEY_REGEX = /^Array::dialog_tag_(?\d*)_(?.*)/i + DIALOG_TAG_KEY_REGEX = /^TagArray::dialog_tag_(?\d*)_(?.*)/i DIALOG_TAG_VALUE_REGEX = /Classification::(\d*)/ private @@ -22,11 +22,15 @@ def provisioning_tag_ids provision_sequence = miq_request_task.provision_priority + 1 dialog_options = root_service.options[:dialog] || {} + tags = [] dialog_options.flat_map do |key_name, value| if (match = DIALOG_TAG_KEY_REGEX.match(key_name)) tag_sequence = match[:sequence].to_i - value.scan(DIALOG_TAG_VALUE_REGEX).flatten if tag_sequence.zero? || tag_sequence == provision_sequence + Array.wrap(value).each do |tag| + tags.push(tag.scan(DIALOG_TAG_VALUE_REGEX).flatten) if tag_sequence.zero? || tag_sequence == provision_sequence + end end end.compact + tags.flatten end end diff --git a/spec/models/dialog_field_tag_control_spec.rb b/spec/models/dialog_field_tag_control_spec.rb index 8a3927cf754..475210d08f0 100644 --- a/spec/models/dialog_field_tag_control_spec.rb +++ b/spec/models/dialog_field_tag_control_spec.rb @@ -139,13 +139,13 @@ def add_entry(cat, options) it "automate_output_value with an single value" do tag = Classification.first @df.value = tag.id.to_s - expect(@df.automate_output_value).to eq([tag.id.to_s]) + expect(@df.automate_output_value).to eq(["#{tag.class.name}::#{tag.id}"]) end it "automate_output_value with multiple values" do tags = [Classification.first, Classification.last] @df.value = tags.collect(&:id).join(",") - expect(@df.automate_output_value).to match_array(tags.collect { |tag| tag.id.to_s }) + expect(@df.automate_output_value).to match_array(tags.collect { |tag| "#{tag.class.name}::#{tag.id}" }) end end end diff --git a/spec/models/service_orchestration/provision_tagging_spec.rb b/spec/models/service_orchestration/provision_tagging_spec.rb index b5d08356cc4..99d67ebb83e 100644 --- a/spec/models/service_orchestration/provision_tagging_spec.rb +++ b/spec/models/service_orchestration/provision_tagging_spec.rb @@ -20,9 +20,9 @@ let(:service) { FactoryBot.build(:service_orchestration, :miq_request_task => miq_request_task) } let(:dialog_tag_options) do {:dialog => { - 'Array::dialog_tag_0_env' => 'Classification::1', - 'Array::dialog_tag_1_network' => 'Classification::11', - 'Array::dialog_tag_2_dept' => 'Classification::21,Classification::22,Classification::23' + 'TagArray::dialog_tag_0_env' => ['Classification::1'], + 'TagArray::dialog_tag_1_network' => 'Classification::11,Classification::12', # Verify it works with both strings and arrays + 'TagArray::dialog_tag_2_dept' => ['Classification::21', 'Classification::22', 'Classification::23'] }} end @@ -42,7 +42,7 @@ context 'Calls Classification.bulk_reassignment with VM and tag IDs for provision_priority 0' do let(:provision_priority) { 0 } - let(:tag_ids) { %w[1 11] } + let(:tag_ids) { %w[1 11 12] } it_behaves_like 'service_orchestration VM tagging' end @@ -59,7 +59,7 @@ context 'Calls Classification.bulk_reassignment with VM and tag IDs for provision_priority 0' do let(:provision_priority) { 0 } - let(:tag_ids) { %w[1 11] } + let(:tag_ids) { %w[1 11 12] } it_behaves_like 'service_orchestration VM tagging' end