使用Molecule结合Vagrant测试Ansible代码时出现nslookup命令未找到错误
问题原因
报错是因为测试用的Vagrant虚拟机默认没有预装nslookup工具,该工具属于DNS工具包,不同发行版对应的包名不同。
解决方案
方案1:临时手动修复(适用于快速验证问题)
进入对应的Vagrant虚拟机执行对应安装命令即可:
- RedHat/CentOS/Fedora 系系统执行:
sudo dnf install -y bind-utils(低版本用sudo yum install -y bind-utils) - Debian/Ubuntu 系系统执行:
sudo apt update && sudo apt install -y dnsutils
方案2:集成到Molecule测试流程(永久生效,推荐)
在Molecule测试目录的prepare.yml预置任务文件中添加安装依赖的任务,每次启动测试环境时会自动预装对应工具,无需手动操作:
--- - name: 预置测试环境 hosts: all gather_facts: yes tasks: - name: 安装nslookup依赖包 ansible.builtin.package: name: "{{ 'bind-utils' if ansible_os_family == 'RedHat' else 'dnsutils' }}" state: present
方案3:无需额外装包的替代方案
如果不想为测试环境额外安装依赖,可以将原有任务中的nslookup hostname --fqdn``命令替换为glibc自带、绝大多数系统默认预装的getent命令:getent hosts $(hostname --fqdn)
功能和nslookup查询本地域名的效果一致,不需要额外安装软件包。
内容的提问来源于stack exchange,提问作者Shinjith
相关产品推荐
相关产品推荐

