Ansible Molecule测试CentOS7 Docker镜像时收集事实失败问题
Ansible Molecule测试时Gathering Facts阶段临时目录创建失败解决方案
该报错指向Ansible连接的远程测试实例上的运行用户无权限写入家目录下的.ansible/tmp路径,与本地主机的/.ansible目录无关,以下是可用解决方案,按优先级排序:
- 方案1:修改Ansible远程临时目录配置(最便捷)
在Molecule对应场景的ansible.cfg文件(默认路径为molecule/default/ansible.cfg)中添加如下配置,将远程临时目录指定为所有用户都有权限写入的/tmp路径下:
[defaults] remote_tmp = /tmp/ansible-$USER
- 方案2:修正Molecule实例的连接用户配置
打开molecule/default/molecule.yml文件,检查platforms配置段的连接用户权限:- 若测试镜像支持root登录,直接指定ssh_user为root即可规避家目录权限问题
- 若使用非root用户登录,需确保对应用户的家目录存在且有读写权限,可在provisioner的pre_playbooks段添加初始化家目录的逻辑
示例配置参考:
platforms: - name: instance image: centos:stream9 ssh_user: root privileged: true command: /usr/sbin/init
- 方案3:在Converge play中前置初始化任务(适配需保留自定义gather_facts逻辑的场景)
调整你的Converge.yml,先关闭自动收集事实,前置创建临时目录的任务,再手动触发事实收集:
--- - name: Converge hosts: all gather_facts: false tasks: - name: 初始化Ansible远程临时目录 ansible.builtin.file: path: ~/.ansible/tmp state: directory mode: '0700' become: true - name: 收集系统事实 ansible.builtin.setup: - import_playbook: ../../setUpVm.yml
所有方案修改完成后,可执行molecule converge单独运行converge阶段验证修复效果,无需执行全量molecule test节省时间。
内容的提问来源于stack exchange,提问作者Ruth Edges
相关产品推荐
相关产品推荐

