【问题标题】:Ansible not able to find python moduleAnsible 找不到 python 模块
【发布时间】:2019-03-27 09:19:54
【问题描述】:

使用 ansible 在多个虚拟机上运行 docker swarm。
即使已安装,ansible 也无法在远程机器上找到 python 模块docker

运行剧本 sudo ansible-playbook -i inv2.py /etc/ansible/playbook.yml

错误信息:

fatal: [10.212.137.216]: FAILED! => {"changed": false, "msg": "Failed to import docker or docker-py - No module named requests.exceptions. Try `pip install docker` or `pip install docker-py` (Python 2.6)"}

模块列表:

ubuntu@donald0:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
...
cryptography (2.1.4)
docker (3.7.1)
docker-pycreds (0.4.0)
...

【问题讨论】:

  • 找出python的版本“python --version”并确保系统符合Requirements
  • 管理机器:Python 2.7.11 节点机器:Python 2.7.15rc1

标签: python pip ansible


【解决方案1】:

出现此错误是因为 Ansible 正在搜索您正在使用的 Python 模块的不同路径。

当您使用official package 安装 Ansible 时,它​​使用 Python 2.7,因此当您运行 Ansible 时,它​​将搜索 python 2 模块。

有一些方法可以解决这个问题:

- 添加 ansible_python_interpreter 选项设置正确的 Python 路径:

像下面的例子:

ansible-playbook -i inventory playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'

- 使用 pip3 重新安装 ansible:

使用以下命令:

sudo apt remove ansible
pip3 install ansible

我认为第二种选择是避免未来错误的最佳方法。

阅读有关 Ansible 支持 Python 3 的更多信息:Ansible - Python 3 Support

【讨论】:

    【解决方案2】:

    以下配置对我有用。它安装了 docker、python 和 docker-compose 最新版本

    ---
    - name: Checking docker on latest version
      apt: name=docker.io state=latest
    
    - name: Checking python
      apt: name=python state=latest
    
    - name: Checking docker-compose on latest version
      apt: name=docker-compose state=latest
    

    【讨论】:

    • 本示例不使用任何 docker* ansible 模块,也不需要安装任何 docker(-py) pip 模块
    • @Zeitounator:ansible 的 docker 模块需要在托管机器上安装 python docker 模块。实现此目的的一种方法是在使用 Ansible docker 插件之前使用 Ansible 模块安装 python-docker。虽然我没有看到这个答案实际安装python-docker
    【解决方案3】:

    FWIW,我遇到了这个问题,因为/usr/lib64/python2.7 下的目录仅对root 可读和可执行。在我运行chmod -R go+rX /usr/lib{,64} 之后,问题就消失了。 rootumask077,因此出现了问题。

    【讨论】:

      【解决方案4】:

      你需要在你的主机文件中使用 python 解释器 - /etc/ansible/hosts

      ansible_python_interpreter=/usr/bin/python3
      

      例如:

      ubuntu@${ip} ansible_private_key_file=~/.ssh/${var.key_name}.pem ansible_python_interpreter=/usr/bin/python3
      

      对于 playbook,您需要 Python 模块和 python docker-compose。工作示例是:

      tasks:
          - name: Install Docker
            apt:
              update_cache: yes
              name: docker.io
        
          - name: Install Docker-Compose
            apt:
              name: docker-compose
        
          - name: Install Python Module
            apt:
              name: python3-pip
        
          - name: Install Python Docker-Compose
            pip:
              name: docker-compose
      

      【讨论】:

      • 您的示例中的任务均未使用来自 ansible 的任何 docker 模块。这实际上将如何解决与安装在 python 中的所需 docker 模块相关的 OP 问题?
      • @Zeitounator:ansible 的 docker 模块需要在托管机器上安装 python docker 模块。实现此目的的一种方法是在使用 Ansible docker 插件之前使用 Ansible 模块安装 python-docker。虽然我没有看到这个答案实际安装python-docker
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多