如何复用变量为Ansible zabbix_host模块的host_groups和tags赋值?
解决方法
直接利用Ansible的map过滤器将item.groups的列表格式转换为tags参数要求的字典列表格式,无需额外定义重复变量:
- name: Probe community.zabbix.zabbix_host: host_name: "{{ item.name }}" host_groups: "{{ item.groups }}" tags: "{{ item.groups | map('community.general.dict_kv', 'tag') | list }}" loop: "{{ zabbix_sensor }}"
原理说明
map('community.general.dict_kv', 'tag'):遍历item.groups中的每个元素,将其转换为{tag: 元素值}的字典格式| list:将map返回的迭代器转换为列表,匹配tags参数的格式要求
替代方案(无community.general集合时)
如果你的Ansible环境未安装community.general集合,可通过原生过滤器组合实现:
tags: "{{ item.groups | map('regex_replace', '^(.*)$', '{\"tag\": \"\\1\"}') | map('from_json') | list }}"
该写法通过正则替换生成JSON字符串,再转换为字典,最终生成符合要求的列表结构。
内容的提问来源于stack exchange,提问作者Romain Tiennot
相关产品推荐
相关产品推荐

