Ansible如何通过jinja2处理多级变量生成域名与用户映射列表
Ansible变量结构转换实现方法
方案1:使用json_query过滤器(写法简洁)
需要先在Ansible控制节点安装jmespath依赖:pip install jmespath,之后直接声明变量即可:
domains_with_user: >- {{ webserver.sites | map('json_query', 'domains[].{domain: domain, user: user}') | flatten }}
方案2:纯Jinja2原生语法(无额外依赖)
不需要安装任何第三方包,直接用Jinja2循环实现:
domains_with_user: >- {% set res = [] %} {% for site in webserver.sites %} {% for d in site.domains %} {% do res.append({'domain': d.domain, 'user': site.user}) %} {% endfor %} {% endfor %} {{ res }}
两种写法均可以直接在变量定义处使用,运行后得到的domains_with_user就是目标结构。
内容的提问来源于stack exchange,提问作者Bas
相关产品推荐
相关产品推荐

