ansible报错解决:Failed to import the required Python library (netaddr)

ansible报错解决:Failed to import the required Python library (netaddr)

问题情况

今天我在做实验的时候出现了一个问题,以下是我的playbook,这个playbook是验证变量ip_address是否是一个合法的IP地址,并打印相应的信息的一个剧本

shell 复制代码
[root@localhost ansible]# vim test6.yml 
- hosts: test
  vars:
    ip_address: "192.168.2455.1"
  tasks:
    - name: "判断{{ip_address}}是否为合法ip"
      debug:
        msg: "{{ ip_address | ipaddr}}"
# 执行结果
[root@localhost ansible]# ansible-playbook test6.yml 

PLAY [test] *************************************************************************************************************************

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

TASK [判断192.168.2455.1是否为合法ip] *********************************************************************************************
fatal: [192.168.200.20]: FAILED! => {"msg": "template error while templating string: Could not load \"ipaddr\": 'Invalid plugin FQCN (ansible.netcommon.ipaddr): unable to locate collection ansible.netcommon'. String: {{ ip_address | ipaddr}}. Could not load \"ipaddr\": 'Invalid plugin FQCN (ansible.netcommon.ipaddr): unable to locate collection ansible.netcommon'"}

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

这里报错没有识别ipaddr这个集合,并告诉你没有安装ansible.netcommon.ipaddr集合,这时候我们安装集合就好了对吧

shell 复制代码
# 安装集合
[root@localhost ansible]# ansible-galaxy collection install /root/ansible-netcommon-6.1.1.tar.gz 
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/ansible-utils-4.1.0.tar.gz to /root/.ansible/tmp/ansible-local-4770j3qwrbe5/tmptvw6n2g6/ansible-utils-4.1.0-_5mvcxlt
Installing 'ansible.netcommon:6.1.1' to '/root/ansible/mycollection/ansible_collections/ansible/netcommon'
ansible.netcommon:6.1.1 was installed successfully
Installing 'ansible.utils:4.1.0' to '/root/ansible/mycollection/ansible_collections/ansible/utils'
ansible.utils:4.1.0 was installed successfully
# 查看集合
[root@localhost ansible]# ansible-galaxy collection list
# 这里是我自己设置的集合路径,显示已经安装了对吧
# /root/ansible/mycollection/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 6.1.1  
ansible.utils     4.1.0  

再次执行这个playbook

shell 复制代码
[root@localhost ansible]# ansible-playbook test6.yml 

PLAY [test] *************************************************************************************************************************

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

TASK [Set the IP address192.168.2455.1] *********************************************************************************************
[DEPRECATION WARNING]: Use 'ansible.utils.ipaddr' module instead. This feature will be removed from ansible.netcommon in a release 
after 2024-01-01. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [192.168.200.20]: FAILED! => {"msg": "Failed to import the required Python library (netaddr) on localhost.localdomain's Python /usr/bin/python3.11. 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"}
# 这个时候他告诉我们没有netaddr这个python库
# 这里我们安装这个python库
# 也是我自己出错的点,你ansible使用的是哪个python版本
# 你就要使用哪个版本来安装netaddr这个python库才行
PLAY RECAP **************************************************************************************************************************
192.168.200.20             : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

解决问题

先查看ansible版本

shell 复制代码
[root@localhost ansible]# ansible --version
ansible [core 2.14.2]
  config file = /root/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /root/ansible/mycollection:/root/ansible/{{ ANSIBLE_HOME ~ "/collections:/usr/share/ansible/collections" }}
  executable location = /usr/bin/ansible
  python version = 3.11.2 (main, Feb 16 2023, 00:00:00) [GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] (/usr/bin/python3.11)
  jinja version = 3.1.2
  libyaml = True
# 用的python3.11对吧
# 使用python3.11安装netaddr

安装netaddr这个python库

shell 复制代码
# 安装pip3.11
[root@localhost ansible]# yum install -y python3.11-pip.noarch 
# 创建python虚拟环境
python3.11 -m venv python_env
source python_env/bin/activate
(python_env) [root@localhost ansible]# pip3.11 install netaddr
Collecting netaddr
  Using cached netaddr-1.2.1-py3-none-any.whl (2.3 MB)
Installing collected packages: netaddr
Successfully installed netaddr-1.2.1

[notice] A new release of pip available: 22.3.1 -> 24.0
[notice] To update, run: pip install --upgrade pip

执行成功

shell 复制代码
(python_env) [root@localhost ansible]# ansible-playbook test6.yml 

PLAY [test] *************************************************************************************************************************

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

TASK [判断192.168.2455.1是否为合法ip] ***********************************************************************************************
[DEPRECATION WARNING]: Use 'ansible.utils.ipaddr' module instead. This feature will be removed from ansible.netcommon in a release 
after 2024-01-01. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
# 这里告诉我们要使用完整的模块名字
ok: [192.168.200.20] => {
    "msg": false
}

PLAY RECAP **************************************************************************************************************************
192.168.200.20             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
相关推荐
左手の明天35 分钟前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
꯭自꯭闭꯭37 分钟前
达梦SQL优化相关
linux·运维·数据库·sql
ZhangJun951 小时前
在 32GB 内存电脑上本地搭建 Qwen3.6-35B-A3B 大模型踩坑实录
运维·人工智能·阿里云·ai·软件构建
一条破秋裤1 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
贵州山魈羡民2 小时前
【玩转手机】通过 Podroid 上的 Alpine 部署 1Panel,把微型服务器装进口袋
运维·服务器
小白的码BUG之路2 小时前
Docker -- 构建nacos镜像
运维·docker·容器
谷哥的小弟3 小时前
CentOS Stream浴火重生
linux·运维·centos
程序员-Benothing4 小时前
Shell输入输出详解:read、echo、printf、颜色输出
linux·运维·服务器
和裕4 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
FPGA小徐4 小时前
从 NEMU 到 AbstractMachine:程序、运行时环境与 AM 完全解析
linux·运维·服务器