Open dsgnr opened 3 years ago
This also occurs if the dnf/yum module is used more than once in the same playbook. I think because mitogen always keeps the process alive that state from a previous call to libdnf is left around, causing subsequent attempts to initialize libdnf to fail. Some code would need te added to clean up after the dnf module.
ansible_facts: {}
module_stderr: |-
Traceback (most recent call last):
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible_mitogen/runner.py", line 975, in _run
self._run_code(code, mod)
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible_mitogen/runner.py", line 939, in _run_code
exec(code, vars(mod))
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible/modules/dnf.py", line 1330, in <module>
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible/modules/dnf.py", line 1319, in main
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible/modules/dnf.py", line 1288, in run
File "master:/home/wouterhummelink/.local/lib/python3.9/site-packages/ansible/modules/dnf.py", line 620, in _base
File "/usr/lib/python3.6/site-packages/dnf/base.py", line 300, in init_plugins
self._plugins._load(self.conf, disabled_glob, enable_plugins)
File "/usr/lib/python3.6/site-packages/dnf/plugin.py", line 131, in _load
raise RuntimeError("load_plugins() called twice")
RuntimeError: load_plugins() called twice
module_stdout: ''
msg: |-
MODULE FAILURE
See stdout/stderr for the exact error
rc: 1
This could be solved by calling into dnf.plugin.Plugins._unload()
but I'm not quite sure where such cleanup should go... ansible or mitogen
I've locally patched dnf.py in ansible to call _unload() just before the call to init_plugins()
that appears to successfully work around this issue.
@moreati The ansible project appears to be unwilling to fix this on their end.
thank you, I don't think this will make it into the next release candidate. Possibly the one after.
Hi, I can confirm this on 3 centos8 and a rhel8. Any help you might need in debugging this, just ping me (I am very happy that mitogen finally is usable with ansible 2.10)!
Another confirmation for CentOS8
As workaround I added the following to the task:
vars:
mitogen_task_isolation: fork
Example:
- name: Podman | Installing podman....
package:
name:
- podman
state: present
vars:
mitogen_task_isolation: fork
@Madic- workaround works for me too.
I can confirm this bug for Oracle Linux 8. Mitogen 0.3.0-rc1 and ansible-base 2.10.5.
I've reproduced this in https://github.com/moreati/mitogen/tree/issue776, after checking out the branch you can use Tox to run these tests, e.g.
ANSIBLE_TAGS=issue_776 tox -e py39-mode_ansible-distros_centos8
Adding ansible.legacy.dnf
to ALWAYS_FORK_MODULES
list in ansible_mitogen/planner.py seems to fix this issue with yum.
+++ ./ansible_mitogen/planner.py 2021-03-26 14:18:56.000000000 +0200
@@ -321,6 +321,7 @@
ALWAYS_FORK_MODULES = frozenset([
'dnf', # issue #280; py-dnf/hawkey need therapy
'firewalld', # issue #570: ansible module_utils caches dbus conn
+ 'ansible.legacy.dnf', # issue #776
])
def should_fork(self):
@annttu yep, I could confirm that it works with RHEL8/Python3 and Ansible 2.10 .
thanks for sharing this fix! guys could you somehow release the fix even as an unofficial version?
right now I need to reference fork in my build but it just would be nice to reference your awesome project ;)
btw maybe this ALWAYS_FORK_MODULES
param should be a configurable option from ansible.cfg? :)
Adding
ansible.legacy.dnf
toALWAYS_FORK_MODULES
list in ansible_mitogen/planner.py seems to fix this issue with yum.+++ ./ansible_mitogen/planner.py 2021-03-26 14:18:56.000000000 +0200 @@ -321,6 +321,7 @@ ALWAYS_FORK_MODULES = frozenset([ 'dnf', # issue #280; py-dnf/hawkey need therapy 'firewalld', # issue #570: ansible module_utils caches dbus conn + 'ansible.legacy.dnf', # issue #776 ]) def should_fork(self):
Can confirm this fixes it on Ansible 2.10.7 on MacOS as well, for both package
and dnf
.
If you want to easily install the PR #845 that contains this fix without manually patching, you can run something like:
pip install git+https://github.com/mitogen-hq/mitogen.git@refs/pull/845/merge
if you look at the ALWAYS_FORK_MODULES
list you can see that dnf already was in there for a different reason (#280), it just wasn't migrated to the new naming scheme i guess?
Hello, this is a must have! Please release version 0.3.0 in pypi with this patch, it really a required on redhat8. Good job !
When using the
package
module with the latest RC (as well as latest commit on master branch) of Mitogen for Ansible 2.10.5, I am receiving an exception;However, using the individual modules works fine;
Which version of Ansible are you running? Ansible 2.10.5
Is your version of Ansible patched in any way?
No
Are you running with any custom modules, or
module_utils
loaded? NoHave you tried the latest master version from Git? Running v0.3.0-rc.0
Do you have some idea of what the underlying problem may be?
Mention your host and target OS and versions Red Hat Enterprise Linux release 8.3 (Ootpa)
Mention your host and target Python versions
EDIT (AW): Formatted error and traceback