Solución Definitiva: Error «ModuleNotFoundError: No module named ‘ansible.module_utils.six.moves'» en Ansible

Published:

Al ejecutar ansible ping en un host remoto con Ubuntu 24.04 (Python 3.12), aparece el error:

ansible all -m ping -i inventory.ini
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ModuleNotFoundError: No module named 'ansible.module_utils.six.moves'
10.10.0.9 | FAILED! => {
    "changed": false,
    "module_stderr": "Shared connection to 10.10.0.9 closed.\r\n",
    "module_stdout": "Traceback (most recent call last):\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1754867526.6967497-3028028-37007299920880/AnsiballZ_ping.py\", line 102, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1754867526.6967497-3028028-37007299920880/AnsiballZ_ping.py\", line 94, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1754867526.6967497-3028028-37007299920880/AnsiballZ_ping.py\", line 37, in invoke_module\r\n    from ansible.module_utils import basic\r\n  File \"/tmp/ansible_ping_payload_02mw2yq8/ansible_ping_payload.zip/ansible/module_utils/basic.py\", line 176, in <module>\r\nModuleNotFoundError: No module named 'ansible.module_utils.six.moves'\r\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

Esto ocurre porque:

  • Ansible 2.16.3 no es totalmente compatible con Python 3.12.

  • Ubuntu 24.04 bloquea la instalación global de paquetes Python (externally-managed-environment).


🛠 Causas del Error

Componente Problema
Python 3.12 Cambios internos en paquetes (como six) rompen compatibilidad con Ansible.
Ubuntu 24.04 Implementa PEP 668, que impide instalar paquetes Python con pip global.
Ansible 2.16.3 Diseñado para Python 3.9-3.11, no 3.12.

✅ Soluciones Definitivas

Usar Python 3.11 (Recomendado), en el Host Remoto:

# Instalar Python 3.11 desde deadsnakes PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.11 python3.11-venv

# Configurar como alternativa predeterminada
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo update-alternatives --set python3 /usr/bin/python3.11

# Instalar dependencias
python3 -m pip install ansible-core==2.16.3 six

Y acá la prueba de que funciona bien ahora.

ansible all -m ping -i inventory.ini
10.10.0.9 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles