如何将Ansible json_query结果转换为带变量的YAML Inventory?
将JSON查询结果转换为Ansible YAML Inventory的实现方法
你可以通过以下两种方式将community.general.json_query获取的设备列表转换为可用的YAML Inventory:
方法1:生成静态YAML Inventory文件
适合需要长期复用Inventory的场景,步骤如下:
- 准备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 %}
- 在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
相关产品推荐
相关产品推荐

