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

Molecule prepare步骤如何调用存放在其他目录的Ansible角色

解决方案

你要实现的跨目录调用角色的需求完全可行,该报错和权限无关,是Ansible角色搜索路径的解析优先级和Molecule执行上下文的问题。以下是按推荐优先级排序的实现方式:

  • 最优方案:通过Molecule依赖配置预安装role-2
    该方案和你部署环节的逻辑完全对齐,不会出现测试/生产环境不一致的问题。操作步骤如下:
    1. 在你的Molecule场景目录(默认是molecule/default/)下新建requirements.yml文件,内容如下:
    ---
    roles:
      - name: role-2
        src: ../../../role-2 # 此处路径为相对于当前requirements.yml的role-2父目录路径,也可以写绝对路径
    
    1. 修改同目录下的molecule.yml,添加依赖配置:
    dependency:
      name: galaxy
      options:
        role-file: requirements.yml
    
    配置完成后Molecule会在执行prepare.yml前自动将role-2安装到自身的角色搜索目录,无需额外修改环境变量。
  • 次选方案:修正ANSIBLE_ROLES_PATH的路径配置
    你之前配置的路径不生效大概率是相对路径计算错误,Molecule执行时的默认工作目录是场景目录(即molecule/default/),相对路径要基于该目录计算。推荐用绝对路径或者动态获取当前工作目录的方式配置,示例如下:
    provisioner:
      name: ansible
      env:
        ANSIBLE_ROLES_PATH: "{{ lookup('env', 'PWD') }}/../../../role-2-parent-dir:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles"
    
    注意你之前添加的become和become_user参数仅作用于角色内部任务的执行用户,不影响Ansible搜索角色的过程,Ansible是用执行molecule test命令的用户来搜索角色的,因此这两个参数对解决角色找不到的问题没有作用。
  • 兜底方案:直接指定角色绝对路径
    如果不想修改全局配置,可以直接在import_role中填写role-2的绝对路径,示例如下:
    - name: Install role-2
      import_role:
        name: /home/your-user/projects/role-2
    
    该方法不需要修改任何其他配置,直接生效。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:03