From 5b95076f785d30f2cc429a1d9671aa91258bb7c0 Mon Sep 17 00:00:00 2001 From: Lucy Fu Date: Thu, 27 Sep 2018 17:52:01 -0400 Subject: [PATCH] Keep the encrypted value as is when creating service provision request. Currently the encrypted value is sent to service provision request as "********" when called via custom button. https://bugzilla.redhat.com/show_bug.cgi?id=1602883 --- .../__methods__/order_ansible_playbook.rb | 3 ++- .../order_ansible_playbook_spec.rb | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook.rb b/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook.rb index 781573d04..a603d85ab 100644 --- a/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook.rb +++ b/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook.rb @@ -29,7 +29,8 @@ def extra_vars key_list = @handle.root.attributes.keys.select { |k| k.start_with?('dialog_param') } key_list.each_with_object({}) do |key, hash| match_data = ANSIBLE_DIALOG_VAR_REGEX.match(key) - hash["param_#{match_data[1]}"] = @handle.root[key] if match_data + next unless match_data + hash["param_#{match_data[1]}"] = @handle.root.encrypted?(key) ? @handle.root.encrypted_string(key) : @handle.root[key] end end diff --git a/spec/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook_spec.rb b/spec/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook_spec.rb index e138121aa..6402e996a 100644 --- a/spec/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook_spec.rb +++ b/spec/content/automate/ManageIQ/System/Request.class/__methods__/order_ansible_playbook_spec.rb @@ -2,7 +2,9 @@ describe ManageIQ::Automate::System::Request::OrderAnsiblePlaybook do let(:root_object) do - Spec::Support::MiqAeMockObject.new(attributes) + Spec::Support::MiqAeMockObject.new(attributes).tap do |root| + allow(root).to receive(:encrypted?).and_return(false) + end end let(:ae_service) do @@ -193,4 +195,25 @@ expect { described_class.new(ae_service).main }.to raise_error(/IP address not specified for vm/) end end + + context "with protected dialog fields" do + let(:extra_vars) do + { :credential => nil, + :hosts => nil, + 'param_password' => 'secret' } + end + let(:attributes) do + { 'service_template_name' => svc_service_template.name, + 'dialog_param_password' => 'encrypted_value', + 'vmdb_object_type' => 'vm', + 'vm' => svc_vm } + end + + before do + allow(root_object).to receive(:encrypted?).and_return(true) + allow(root_object).to receive(:encrypted_string).and_return("secret") + end + + it_behaves_like "order playbook" + end end