You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置段的连接用户权限:
    1. 若测试镜像支持root登录,直接指定ssh_user为root即可规避家目录权限问题
    2. 若使用非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:36:02