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

Ansible Molecule Verify为何无法读取角色默认变量?

问题原因及解决办法

核心原因

Molecule的verify剧本是独立运行的Playbook,不会自动继承角色的默认变量——哪怕你在init阶段引入了角色,verify阶段的Playbook处于单独的执行上下文,不会自动加载角色的defaults配置。

具体解决方式

1. 在verify.yml中明确引入角色

直接在verify的Play里加载你的角色,Ansible会自动读取角色的defaults变量:

- name: Verify
  hosts: all
  roles:
    - 你的角色名称
  tasks:
    - name: 检查archive_audio_etc_dir目录存在
      stat:
        path: "{{ archive_audio_etc_dir }}"
      register: dir_check
    - name: 断言目录存在
      assert:
        that: dir_check.stat.exists

2. 手动导入角色的defaults变量文件

如果不想在verify阶段执行角色的任务,只想加载变量,可以用include_vars直接导入defaults文件:

- name: Verify
  hosts: all
  tasks:
    - name: 加载角色默认变量
      include_vars:
        file: ../../defaults/main.yml
        name: role_defaults
    - name: 检查目录存在
      stat:
        path: "{{ role_defaults.archive_audio_etc_dir }}"
      register: dir_check
    - name: 断言目录存在
      assert:
        that: dir_check.stat.exists

3. 检查Molecule的verify配置

确认molecule/default/molecule.yml里的verifier配置是用playbook模式,而非command模式(command模式会忽略Playbook的角色加载逻辑):

verifier:
  name: ansible
  playbook: verify.yml

为什么加空init.yml没用?

init.yml是Molecule创建阶段的执行剧本,运行在converge阶段之前,它的变量上下文和verify阶段完全隔离。verify阶段的Playbook不会继承init阶段加载的任何变量,所以哪怕你在init里引入了角色,verify剧本还是拿不到默认变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:30:50