mirror of
https://github.com/freeipa/ansible-freeipa.git
synced 2026-03-26 21:33:05 +00:00
Force plugins to execute using LANGUAGE='C'.
IPA translates exception messages and Ansible uses controller's
language to execute plugins on target hosts, and since ansible-freeipa
uses Exceptions messages to detect some errors and/or states, using any
language that has a translation for the required messages may cause the
plugin to misbehave.
This patch modifies ansible_freeipa_module in plugin/module_utils to
force the use of "C" as the language by setting the environment variable
LANGUAGE.
Tests were added to verify the correct behavior:
tests/environment/test_locale.yml
The first test will fail, if ansible_freeipa_module is not patched, with
the message:
host_show failed: nonexistent: host nicht gefunden
This issue is not present if the language selected does not provide
a translation for the eror message.
This patch does not fix encoding issues that might occur in certain
releases (e.g.: CentOS 8.3).
Fix #516
This commit is contained in:
@@ -93,6 +93,9 @@ except ImportError:
|
||||
if six.PY3:
|
||||
unicode = str
|
||||
|
||||
# ansible-freeipa requires locale to be C, IPA requires utf-8.
|
||||
os.environ["LANGUAGE"] = "C"
|
||||
|
||||
|
||||
def valid_creds(module, principal): # noqa
|
||||
"""Get valid credentials matching the princial, try GSSAPI first."""
|
||||
|
||||
32
tests/environment/test_locale.yml
Normal file
32
tests/environment/test_locale.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
- name: Test language variations
|
||||
hosts: ipaserver
|
||||
|
||||
tasks:
|
||||
- name: Ensure a host is not present, with language set to "de_DE".
|
||||
ipahost:
|
||||
ipaadmin_password: SomeADMINpassword
|
||||
name: nonexistent
|
||||
state: absent
|
||||
environment:
|
||||
LANGUAGE: "de_DE"
|
||||
register: result
|
||||
failed_when: result.failed or result.changed
|
||||
|
||||
- name: Ensure a host is not present, with language set to "C".
|
||||
ipahost:
|
||||
ipaadmin_password: SomeADMINpassword
|
||||
name: nonexistent
|
||||
state: absent
|
||||
environment:
|
||||
LANGUAGE: "C"
|
||||
register: result
|
||||
failed_when: result.failed or result.changed
|
||||
|
||||
- name: Ensure a host is not present, using controller language.
|
||||
ipahost:
|
||||
ipaadmin_password: SomeADMINpassword
|
||||
name: nonexistent
|
||||
state: absent
|
||||
register: result
|
||||
failed_when: result.failed or result.changed
|
||||
Reference in New Issue
Block a user