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

Ansible如何将vars_prompt获取的主机列表传入import_playbook

问题根因

你遇到的变量未定义错误是两个核心原因导致的:

  1. import_playbook属于Ansible的静态导入能力,会在整个playbook任务启动前的解析阶段就完成子playbook的加载,此时vars_prompt还未执行、set_fact任务也还没运行,对应变量还未生成。
  2. 你通过set_fact设置的是第一个play中目标主机的主机级变量,仅作用于该主机在当前play的任务上下文,无法作用到子playbook的hosts字段——这个字段需要的是全局可见的play级/全局变量。

解决方案

方案1:导入时显式传递vars_prompt变量(最适配你的场景)

你只需要修改父playbook中导入子playbook的部分,显式将vars_prompt获取的变量传递给子playbook即可,无需修改其他逻辑:

# 父playbook ios_check_routerports.yaml 导入部分修改为
- name: Run playbook
  import_playbook: ios_check_routerports_main.yaml
  vars:
    # 直接把全局的branch_number变量传递给子playbook
    branch_number: "{{ branch_number }}"

子playbook不需要修改,保留hosts: '{{ branch_number }}'即可正常运行。

方案2:改用动态导入include_playbook

如果后续你需要根据父playbook的前置任务结果,动态判断是否执行子playbook,可以换成运行时执行的动态导入:

# 父playbook导入部分修改为
- name: Run playbook
  include_playbook: ios_check_routerports_main.yaml
  vars:
    branch_number: "{{ branch_number }}"

include_playbook会在运行到对应任务时才加载子playbook,此时vars_prompt已经执行完成,变量已经生成。

额外注意

你提供的父playbook代码中,tasks字段的缩进有问题,需要调整到和vars_prompt同级(缩进两个/四个空格,和play内的其他参数对齐),否则会触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:36:08