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

如何在Ansible中根据inventory_hostname遍历对应字典生成配置文件?

实现方法

你可以通过字典键直接访问的方式,根据inventory_hostname的值动态获取对应的列表,具体修改如下:

修改后的Ansible任务

- name: Create all daemon supervisor files
  ansible.builtin.template:
    src: supervisor_daemon_template.j2
    dest: /tmp/asd/{{item.brand}}_{{ item.daemon_name }}.conf
  # 直接用inventory_hostname作为字典键,获取对应列表
  loop: "{{ app_daemons[inventory_hostname] }}"
  vars:
    app_daemons:
      app1:
        - { daemon_name: 'receiver', brand: 'nokia' }
        - { daemon_name: 'parser', brand: 'nokia' }
      app2:
        - { daemon_name: 'receiver', brand: 'samsung' }
        - { daemon_name: 'parser', brand: 'samsung' }

原理说明

  • inventory_hostname的值为app1或app2,刚好对应app_daemons字典的键,通过app_daemons[inventory_hostname]可以直接取出对应主机需要的守护进程列表。
  • 当目标主机的inventory_hostname是app1时,循环会遍历app_daemons.app1下的两个条目,生成nokia品牌的配置文件;如果是app2,则生成samsung品牌的配置文件。

可选:处理主机名不匹配的情况

如果担心某些主机的inventory_hostname不在app_daemons的键中,可以添加default过滤器避免报错:

loop: "{{ app_daemons[inventory_hostname] | default([]) }}"

这样当主机名不存在时,循环会传入空列表,任务不会执行配置文件生成操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:17