【问题标题】:Ansible "ansible_python_interpreter" ErrorAnsible“ansible_python_interpreter”错误
【发布时间】:2020-09-28 09:15:36
【问题描述】:

我想用 ansible 安装 influxdb 和配置。 文件复制和influxdb配置没问题 但是创建数据库和用户创建部分会出现“ansible_python_interpreter”错误。

我搜索了这个错误并尝试了一些方法,但我自己无法解决这个问题

这是我的 ansible hosts 文件

[loadbalancer]
lb      ansible_host=192.168.255.134

[loadbalancer:vars]
ansible_python_interpreter="/usr/bin/python3"
#ansible_python_interpreter="/usr/bin/env python"
#ansible_python_interpreter="/usr/libexec/platform-python"

这是我的 yaml 文件

# influxdb install and configuration

---
  - hosts: lb
    become: true
    tasks:
      - name: Copy Repo Files
        copy:
          src: ./files/influxdb.j2
          dest: /etc/yum.repos.d/influxdb.repo
          remote_src: no
      - name: Install Influxdb
        yum:
          name: influxdb
          state: latest
        notify:
             influxdb_ok
      - name: Crete Database
        community.general.influxdb_database:
          hostname: 192.168.255.134
          database_name: deneme
      - name: Create User
        community.general.influxdb_user:
          user_name: deneme_user
          user_password: deneme123

    handlers:
      - name: Start Influx Service
        service:
          name: influxdb
          state: started
          enabled: yes
        listen: influxdb_ok

我尝试安装 python3 远程 vm(lb)。 我试图更改解释器参数。 我试图用 pip3 安装 requests 模块。

[root@centos8 influx]# ansible-playbook influxdb.yaml -K
BECOME password:

PLAY [lb] ***********************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
ok: [lb]

TASK [Copy Repo Files] **********************************************************************************************
ok: [lb]

TASK [Install Influxdb] *********************************************************************************************
ok: [lb]

TASK [Crete Database] ***********************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ModuleNotFoundError: No module named 'requests'
fatal: [lb]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (requests) on loadbalancer.servicepark.local's Python /usr/bin/python3. Please read the module documentation and install it in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"}

PLAY RECAP **********************************************************************************************************
lb                         : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

我尝试安装 requests 模块和当前的 ansible 版本

现在我的 ansible 机器版本

[root@centos8 influx]# python3 --version
Python 3.6.8
[root@centos8 influx]# ansible --version
ansible 2.10.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

lb vm 的版本

[root@loadbalancer ~]# influx --version
InfluxDB shell version: 1.8.2
[root@loadbalancer ~]# python3 --version
Python 3.6.8

【问题讨论】:

  • 缺少一个 python 模块 (requests)。您应该运行 pip pre_task 以确保安装了所有必需的模块。
  • @KlausD。我现在添加并尝试了它的工作,但仍然得到相同的结果。 "- name: 安装 pip pip: name: requests"
  • 请注意,该模块必须安装在目标上(即lb)和正确的python版本(即3.6.8而不是2.7,如果你都安装了)。
  • /usr/bin/python3 -m pip list 在该主机上返回什么
  • @thargalin 那么你必须找出为什么你认为它已安装以及为什么 ansible 认为它没有。提示:在这个猜谜游戏中,机器 99.99999% 的时间都是正确的。

标签: python python-3.x ansible influxdb


【解决方案1】:

这对我有用。

- name: Install requests python package
  pip:
    name: requests
  vars:
    ansible_python_interpreter: /usr/bin/python3

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
【解决方案2】:

如果您在远程主机上遇到此问题,有 3 种方法可以解决此问题:

  1. 为所有默认安装了 python3 的主机设置 ansible_python_interpreter: /usr/bin/python3 变量
  2. 使用 Ansible 的原始模块安装 Python 2
  3. 使用 Ansible 的原始模块将 /usr/bin/python3 符号链接到 /usr/bin/python。

所有 3 个选项都可以在 Ansible 中完成,无需 ssh 进入主机。

示例

- name: misc task on ubuntu 18.04 instance
  hosts: "*"
  vars:
    ansible_python_interpreter: /usr/bin/python3
  tasks:
    - debug: var=ansible_host

选项 3 - 符号链接 /usr/bin/python -> /usr/bin/python3 使用 Ansible 的原始模块 与选项 2 类似的另一个选项是使用原始模块“符号链接”/usr/bin/python -> /usr/bin/python3。

借助一点 shell 魔法,我们可以使用条件语句根据是否存在任何一个文件来设计一个命令来有条件地执行此操作:

if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then 
  ln --symbolic /usr/bin/python3 /usr/bin/python; 
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多