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

如何将Ansible json_query结果转换为带变量的YAML Inventory?

将JSON查询结果转换为Ansible YAML Inventory的实现方法

你可以通过以下两种方式将community.general.json_query获取的设备列表转换为可用的YAML Inventory:

方法1:生成静态YAML Inventory文件

适合需要长期复用Inventory的场景,步骤如下:

  1. 准备Jinja2模板
    创建名为inventory.j2的模板文件,内容如下:
groupname:
  hosts:
{% for device in device_list %}
    {{ device.hostname }}:
      connected: {{ device.connected }}
      model: {{ device.model }}
      networkaddress: {{ device.networkaddress }}
      serial: {{ device.serial }}
{% endfor %}
  1. 在Playbook中渲染模板
    添加任务调用template模块生成Inventory文件,假设你已将json_query的结果存储在device_list变量中:
- name: 生成目标YAML Inventory
  ansible.builtin.template:
    src: inventory.j2
    dest: ./target_inventory.yml
    mode: '0644'

执行该Playbook后,target_inventory.yml即为符合要求的Inventory文件,后续Playbook可通过ansible-playbook -i target_inventory.yml指定使用。

方法2:动态添加主机到Inventory

适合临时使用、无需生成文件的场景,直接用add_host模块将设备批量加入指定组:

- name: 动态添加设备到groupname组
  ansible.builtin.add_host:
    name: "{{ item.hostname }}"
    groups: groupname
    connected: "{{ item.connected }}"
    model: "{{ item.model }}"
    networkaddress: "{{ item.networkaddress }}"
    serial: "{{ item.serial }}"
  loop: "{{ device_list }}"

执行该任务后,当前Playbook的后续任务可直接针对groupname组操作;若需给其他Playbook使用,可将该逻辑作为前置Playbook执行,或通过额外变量传递设备列表。

注意:确保device_list变量与你通过json_query获取结果的变量名一致,100+台设备的规模两种方法均能稳定处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:05:42