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

Ansible父Playbook如何调用子Playbook中include_vars加载的变量?

Ansible跨Playbook条件导入时变量未定义问题解决

问题背景

我使用Ansible 2.8.1编写了主Playbook playbook.yml,用于导入子Playbook,需求是基于my_app_vars[key1]的值条件导入play2.yml,主Playbook配置如下:

- import_playbook: play1.yml
- import_playbook: play2.yml
  when: {{ my_app_vars[key1] }}
  vars:
    key1: "{{mock_key}}"

子Playbook play1.yml负责加载变量,配置如下:

- name: "Get Some Info"
  hosts: mock_servers
  pre_tasks:
    - name:
      include_vars:
        file: mock-vars.yml
        name: my_app_vars
      register: "{{my_app_vars}}"  # 添加register无效果

执行时出现错误my_app_vars is undefined,添加register字段后问题依旧。虽然play2.yml的role中能正常使用my_app_vars、mock_key和key1,但无法在主playbook.yml中直接引用这些变量。

尝试过的方案及报错

尝试通过hostvars跨Playbook引用变量(已移除play1.yml中的无效register配置),但多次尝试均失败:

  • 配置:
    when: not ( {{ hostvars[groups[mock_servers][0]].my_app_vars[key1] }} )
    
    报错:''mock_servers'' is undefined'
  • 配置:
    when: not ( {{ hostvars[groups['mock_servers'][0]].my_app_vars[key1] }} )
    
    报错:''ansible.vars.hostvars.HostVarsVars object'' has no attribute ''my_app_vars'''
  • 配置:
    when: not ( {{ hostvars[groups.mock_servers.0].my_app_vars[key1] }} )
    
    报错:''ansible.vars.hostvars.HostVarsVars object'' has no attribute ''my_app_vars'''
  • 配置:
    when: not ( {{ hostvars[groups.mock_servers.0] }}.my_app_vars[key1] )
    
    报错:''dict object'' has no attribute ''my_app_vars'

最终解决方案

在play1.yml的play块中添加gather_facts: false后,问题得到完美解决。修改后的play1.yml如下:

- name: "Get Some Info"
  hosts: mock_servers
  gather_facts: false
  pre_tasks:
    - name: Load mock variables
      include_vars:
        file: mock-vars.yml
        name: my_app_vars

此时主playbook.yml中可以通过hostvars正确引用变量,修正后的条件判断配置示例:

- import_playbook: play1.yml
- import_playbook: play2.yml
  when: hostvars[groups['mock_servers'][0]].my_app_vars[key1]
  vars:
    key1: "{{mock_key}}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:35