From e47deb7fd055dc871235d14bbae4c90b3bdf26c7 Mon Sep 17 00:00:00 2001 From: Gilles Cornu Date: Thu, 9 Nov 2017 18:17:04 +0100 Subject: [PATCH] ansible: Fix broken 'ask_sudo_pass' option This bug (invalid method call) hasn't been caught by unit tests because Vagrant::Plugin::V2::Config catches all invalid/bad configuration calls and save them for generating error messages during the "validate" stage. This way, the `ask_sudo_pass=(value)` method was not interrupted and the `@ask_become_pass` attribute was (surprisingly) correctly set (allowing the related unit tests to pass). In order to avoid similar problem to happen again, the deprecation message output is now fully verified. --- plugins/provisioners/ansible/config/host.rb | 2 +- .../provisioners/ansible/config/host_test.rb | 1 + .../provisioners/ansible/config/shared.rb | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/plugins/provisioners/ansible/config/host.rb b/plugins/provisioners/ansible/config/host.rb index 06df0d1c4..8197d8e7b 100644 --- a/plugins/provisioners/ansible/config/host.rb +++ b/plugins/provisioners/ansible/config/host.rb @@ -16,7 +16,7 @@ module VagrantPlugins # alias :ask_sudo_pass :ask_become_pass def ask_sudo_pass=(value) - show_deprecation_warning 'ask_sudo_pass', 'ask_become_pass' + show_deprecation_info 'ask_sudo_pass', 'ask_become_pass' @ask_become_pass = value end diff --git a/test/unit/plugins/provisioners/ansible/config/host_test.rb b/test/unit/plugins/provisioners/ansible/config/host_test.rb index b868d2648..e89bedbd3 100644 --- a/test/unit/plugins/provisioners/ansible/config/host_test.rb +++ b/test/unit/plugins/provisioners/ansible/config/host_test.rb @@ -78,6 +78,7 @@ describe VagrantPlugins::Ansible::Config::Host, :skip_windows => true do allow($stdout).to receive(:puts) end it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :ask_sudo_pass, false + it_behaves_like "any deprecated option", :ask_sudo_pass, :ask_become_pass, true end describe "ask_vault_pass option" do it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :ask_vault_pass, false diff --git a/test/unit/plugins/provisioners/ansible/config/shared.rb b/test/unit/plugins/provisioners/ansible/config/shared.rb index 16902a138..a6495e72c 100644 --- a/test/unit/plugins/provisioners/ansible/config/shared.rb +++ b/test/unit/plugins/provisioners/ansible/config/shared.rb @@ -30,6 +30,17 @@ shared_examples_for 'options shared by both Ansible provisioners' do end +shared_examples_for 'any deprecated option' do |deprecated_option, new_option, option_value| + it "shows the deprecation message" do + expect($stdout).to receive(:puts).with("DEPRECATION: The '#{deprecated_option}' option for the Ansible provisioner is deprecated.").and_return(nil) + expect($stdout).to receive(:puts).with("Please use the '#{new_option}' option instead.").and_return(nil) + expect($stdout).to receive(:puts).with("The '#{deprecated_option}' option will be removed in a future release of Vagrant.\n\n").and_return(nil) + + subject.send("#{deprecated_option}=", option_value) + subject.finalize! + end +end + shared_examples_for 'an Ansible provisioner' do | path_prefix, ansible_setup | provisioner_label = "ansible #{ansible_setup} provisioner" @@ -158,6 +169,15 @@ shared_examples_for 'an Ansible provisioner' do | path_prefix, ansible_setup | allow($stdout).to receive(:puts) end it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :sudo, false + it_behaves_like "any deprecated option", :sudo, :become, true + end + + describe "sudo_user option" do + before do + # Filter the deprecation notice + allow($stdout).to receive(:puts) + end + it_behaves_like "any deprecated option", :sudo_user, :become_user, "foo" end end