简体   繁体   English

Ansible“ansible_python_interpreter”错误

[英]Ansible "ansible_python_interpreter" Error

I want to instal influxdb and configuration with ansible.我想用ansible安装influxdb和配置。 File copy and influxdb configuration is ok But creating database and user create section is give a "ansible_python_interpreter" error.文件复制和 influxdb 配置没问题但是创建数据库和用户创建部分给出了“ansible_python_interpreter”错误。

I searched this error and tried something but I can't solve this problem with myself我搜索了这个错误并尝试了一些东西,但我自己无法解决这个问题

This is my ansible hosts file这是我的 ansible 主机文件

[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"

This is my yaml file这是我的 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

I was tried to install python3 remote vm(lb).我试图安装 python3 远程 vm(lb)。 I was tried to change interpreter parameters.我试图更改解释器参数。 I was tried to install requests module with pip3.我试图用 pip3 安装请求模块。

[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

I was tried to install requests module and currently ansible version我试图安装请求模块和当前的 ansible 版本

Right now my ansible machine versions现在我的 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's versions lb vm 的版本

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

This worked for me.这对我有用。

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

There are 3 ways to solve this problem if you encounter it on your remote host:如果您在远程主机上遇到此问题,有 3 种方法可以解决此问题:

  1. Set ansible_python_interpreter: /usr/bin/python3 variable for all hosts that have python3 installed by default为所有默认安装了 python3 的主机设置 ansible_python_interpreter: /usr/bin/python3 变量
  2. Install Python 2 using Ansible's raw module使用 Ansible 的原始模块安装 Python 2
  3. Symlink /usr/bin/python3 to /usr/bin/python using Ansible's raw module.使用 Ansible 的原始模块将 /usr/bin/python3 符号链接到 /usr/bin/python。

All 3 options can be done in Ansible, without sshing into the host.所有 3 个选项都可以在 Ansible 中完成,而无需 SSH 到主机。

example例子

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

Option 3 - Symlink /usr/bin/python -> /usr/bin/python3 using Ansible's raw module Another option in a similar vein to option 2 is to use the raw module to “symlink” /usr/bin/python -> /usr/bin/python3.选项 3 - 符号链接 /usr/bin/python -> /usr/bin/python3 使用 Ansible 的原始模块另一个与选项 2 类似的选项是使用原始模块来“符号链接” /usr/bin/python -> / usr/bin/python3.

With a bit of shell magic, we can fashion a command to do this conditionally based on whether either of the files exist using conditionals:使用一点 shell 魔法,我们可以根据两个文件是否存在使用条件来创建一个命令来有条件地执行此操作:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM