provisioners/ansible(both): Review of PR #8913

- Keep the Programming Errors with corresponding Exception class and
  en.yml message template. Fix the alphabetical order in errors.rb by
  the way.
- Fix English wording in the documentation and en.yml messages
- Use StandardError for unknown error rescuing.

Thanks @chrisroberts!
This commit is contained in:
Gilles Cornu 2017-09-06 00:40:47 +02:00
parent 6bc0c85e90
commit 4dc3e59b08
No known key found for this signature in database
GPG Key ID: F6BC2CF7E1FE8FFF
4 changed files with 43 additions and 19 deletions

View File

@ -11,25 +11,30 @@ module VagrantPlugins
error_key(:ansible_command_failed) error_key(:ansible_command_failed)
end end
class AnsibleNotFoundOnHost < AnsibleError class AnsibleCompatibilityModeConflict < AnsibleError
error_key(:ansible_not_found_on_host) error_key(:ansible_compatibility_mode_conflict)
end end
class AnsibleNotFoundOnGuest < AnsibleError class AnsibleNotFoundOnGuest < AnsibleError
error_key(:ansible_not_found_on_guest) error_key(:ansible_not_found_on_guest)
end end
class AnsibleNotFoundOnHost < AnsibleError
error_key(:ansible_not_found_on_host)
end
class AnsiblePipInstallIsNotSupported < AnsibleError class AnsiblePipInstallIsNotSupported < AnsibleError
error_key(:cannot_support_pip_install) error_key(:cannot_support_pip_install)
end end
class AnsibleProgrammingError < AnsibleError
error_key(:ansible_programming_error)
end
class AnsibleVersionMismatch < AnsibleError class AnsibleVersionMismatch < AnsibleError
error_key(:ansible_version_mismatch) error_key(:ansible_version_mismatch)
end end
class AnsibleCompatibilityModeConflict < AnsibleError
error_key(:ansible_compatibility_mode_conflict)
end
end end
end end
end end

View File

@ -55,7 +55,7 @@ module VagrantPlugins
def set_and_check_compatibility_mode def set_and_check_compatibility_mode
begin begin
set_gathered_ansible_version(gather_ansible_version) set_gathered_ansible_version(gather_ansible_version)
rescue Exception => e rescue StandardError => e
# Nothing to do here, as the fallback on safe compatibility_mode is done below # Nothing to do here, as the fallback on safe compatibility_mode is done below
@logger.error("Error while gathering the ansible version: #{e.to_s}") @logger.error("Error while gathering the ansible version: #{e.to_s}")
end end
@ -83,7 +83,9 @@ module VagrantPlugins
end end
unless Ansible::COMPATIBILITY_MODES.slice(1..-1).include?(config.compatibility_mode) unless Ansible::COMPATIBILITY_MODES.slice(1..-1).include?(config.compatibility_mode)
raise "Programming Error: compatibility_mode must correctly set at this stage!" raise Ansible::Errors::AnsibleProgrammingError,
message: "The config.compatibility_mode must be correctly set at this stage!",
details: "config.compatibility_mode: '#{config.compatibility_mode}'"
end end
@lexicon = ANSIBLE_PARAMETER_NAMES[config.compatibility_mode] @lexicon = ANSIBLE_PARAMETER_NAMES[config.compatibility_mode]
@ -353,7 +355,12 @@ module VagrantPlugins
def detect_compatibility_mode def detect_compatibility_mode
if !@gathered_version_major || config.compatibility_mode != Ansible::COMPATIBILITY_MODE_AUTO if !@gathered_version_major || config.compatibility_mode != Ansible::COMPATIBILITY_MODE_AUTO
raise "Programming Error: detect_compatibility_mode() shouldn't have been called." raise Ansible::Errors::AnsibleProgrammingError,
message: "The detect_compatibility_mode() function shouldn't have been called!",
details: %Q(config.compatibility_mode: '#{config.compatibility_mode}'
gathered version major number: '#{@gathered_version_major}'
gathered version stdout version:
#{@gathered_version_stdout})
end end
if @gathered_version_major.to_i <= 1 if @gathered_version_major.to_i <= 1

View File

@ -2338,6 +2338,11 @@ en:
ansible_command_failed: |- ansible_command_failed: |-
Ansible failed to complete successfully. Any error output should be Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again. visible above. Please fix these errors and try again.
ansible_compatibility_mode_conflict: |-
The requested Ansible compatibility mode (%{compatibility_mode}) is in conflict with
the Ansible installation on your Vagrant %{system} system (currently: %{ansible_version}).
See https://docs.vagrantup.com/v2/provisioning/ansible_common.html#compatibility_mode
for more information.
ansible_not_found_on_guest: |- ansible_not_found_on_guest: |-
The Ansible software could not be found! Please verify The Ansible software could not be found! Please verify
that Ansible is correctly installed on your guest system. that Ansible is correctly installed on your guest system.
@ -2355,6 +2360,18 @@ en:
on your host system. Vagrant can't do this for you in a safe and on your host system. Vagrant can't do this for you in a safe and
automated way. automated way.
Please check https://docs.ansible.com for more information. Please check https://docs.ansible.com for more information.
ansible_programming_error: |-
Ansible Provisioner Programming Error:
%{message}
Internal Details:
%{details}
Sorry, but this Vagrant error should never occur.
Please check https://github.com/mitchellh/vagrant/issues for any
existing bug report. If needed, please create a new issue. Thank you!
cannot_support_pip_install: |- cannot_support_pip_install: |-
Unfortunately Vagrant does not support yet installing Ansible Unfortunately Vagrant does not support yet installing Ansible
from pip for the guest OS running in the machine. from pip for the guest OS running in the machine.
@ -2370,17 +2387,12 @@ en:
or adapt the provisioner `version` option in your Vagrantfile. or adapt the provisioner `version` option in your Vagrantfile.
See https://docs.vagrantup.com/v2/provisioning/ansible_common.html#version See https://docs.vagrantup.com/v2/provisioning/ansible_common.html#version
for more information. for more information.
ansible_compatibility_mode_conflict: |-
The requested Ansible compatibility mode (%{compatibility_mode}) is in conflict with
the Ansible installation on your Vagrant %{system} system (currently: %{ansible_version}).
See https://docs.vagrantup.com/v2/provisioning/ansible_common.html#compatibility_mode
for more information.
config_file_not_found: |- config_file_not_found: |-
`%{config_option}` does not exist on the %{system}: %{path} `%{config_option}` does not exist on the %{system}: %{path}
extra_vars_invalid: |- extra_vars_invalid: |-
`extra_vars` must be a hash or a path to an existing file. Received: %{value} (as %{type}) `extra_vars` must be a hash or a path to an existing file. Received: %{value} (as %{type})
no_compatibility_mode: |- no_compatibility_mode: |-
`compatibility_mode` must be correctly set (possible values: %{valid_modes}). `compatibility_mode` must be a valid mode (possible values: %{valid_modes}).
no_playbook: |- no_playbook: |-
`playbook` file path must be set. `playbook` file path must be set.
raw_arguments_invalid: |- raw_arguments_invalid: |-

View File

@ -17,15 +17,15 @@ These options get passed to the `ansible-playbook` command that ships with Ansib
Some of these options are for advanced usage only and should not be used unless you understand their purpose. Some of these options are for advanced usage only and should not be used unless you understand their purpose.
- `become` (boolean) - Cause Ansible to perform all the playbook tasks [as another user](http://docs.ansible.com/ansible/become.html), different from the one used to log into the guest system. - `become` (boolean) - Perform all the Ansible playbook tasks [as another user](http://docs.ansible.com/ansible/become.html), different from the user used to log into the guest system.
The default value is `false`. The default value is `false`.
- `become_user` (string) - Set the default username to be used by the Ansible `become` [privilege escalation](http://docs.ansible.com/ansible/become.html) mechanism. - `become_user` (string) - Set the default username to be used by the Ansible `become` [privilege escalation](http://docs.ansible.com/ansible/become.html) mechanism.
By default this option is not defined, and the Ansible default value (`root`) will be used. By default this option is not set, and the Ansible default value (`root`) will be used.
- `compatibility_mode` (string) - Set the **minimal** version of Ansible to be supported. Vagrant will use some parameters that are only compatible since the given version. - `compatibility_mode` (string) - Set the **minimal** version of Ansible to be supported. Vagrant will only use parameters that are compatible with the given version.
Possible values: Possible values:
@ -33,7 +33,7 @@ Some of these options are for advanced usage only and should not be used unless
- `"1.8"` _(Ansible versions prior to 1.8 should mostly work well, but some options might not be supported)_ - `"1.8"` _(Ansible versions prior to 1.8 should mostly work well, but some options might not be supported)_
- `"2.0"` _(The generated Ansible inventory will be incompatible with Ansible 1.x)_ - `"2.0"` _(The generated Ansible inventory will be incompatible with Ansible 1.x)_
By default this option is set to `"auto"`. If Vagrant is not able to detect any supported Ansible version, it will falls back on the compatibility mode `"1.8"` with a warning. By default this option is set to `"auto"`. If Vagrant is not able to detect any supported Ansible version, it will fall back on the compatibility mode `"1.8"` with a warning.
Vagrant will error if the specified compatibility mode is incompatible with the current Ansible version. Vagrant will error if the specified compatibility mode is incompatible with the current Ansible version.
@ -44,7 +44,7 @@ Some of these options are for advanced usage only and should not be used unless
<div class="alert alert-info"> <div class="alert alert-info">
<strong>Compatibility Note:</strong> <strong>Compatibility Note:</strong>
This option was introduced in Vagrant 2.0. Previous Vagrant versions behave like if this option was set to `"1.8"`. This option was introduced in Vagrant 2.0. The behavior of previous Vagrant versions can be simulated by setting the `compatibility_mode` to `"1.8"`.
</div> </div>
- `config_file` (string) - The path to an [Ansible Configuration file](https://docs.ansible.com/intro_configuration.html). - `config_file` (string) - The path to an [Ansible Configuration file](https://docs.ansible.com/intro_configuration.html).