loops - 从 jinja2 中的 ansible 输出中对数据进行排序
问题描述
我有来自 ansible os_stack create 任务的以下输出:
"outputs": [{"description": "lb", "output_key": "lb_1", "output_value": "10.1.1.11"}, {"description": "lb", "output_key": "lb_2", "output_value": "10.1.1.12"}, {"description": "web", "output_key": "web_1", "output_value": "10.1.1.13"}, {"description": "web", "output_key": "web_3", "output_value": "10.1.1.14"}, {"description": "web", "output_key": "web_2", "output_value": "10.1.1.15"}]
我需要将此数据输出到文件中。
我尝试使用以下代码构建 jinja2 模板
{%- set ip_specs = {} -%}
{% for group in outputs[0].description -%}
{%- set net_info=[] -%}
{%- set index = [ 1 ] -%}
{% for ip in outputs[0].output_value[group] -%}
{%- do net_info.append({'net_info': {'ip': ip }, 'index': index[0] }) -%}
{%- do index.append(index.pop()+1) -%}
{%- endfor %}
{% if net_info -%}
{%- do ip_specs.update({ group: net_info }) -%}
{% endif -%}
{%- endfor %}
{{ { 'vm_list': ip_specs } | to_yaml }}
我期待以下格式:
vm_list:
lb:
- net_info: {ip: 10.1.1.11}
index: 1
- net_info: {ip: 10.1.1.12}
index: 2
web:
- net_info: {ip: 10.1.1.13}
index: 1
- net_info: {ip: 10.1.1.14}
index: 2
- net_info: {ip: 10.1.1.15}
index: 3
但我从ansible收到以下错误:
AnsibleUndefinedVariable: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute u'i'
解决方案
您的模板中有一些逻辑错误。试试这个:
{%- set host_groups = {} -%}
{%- for output in outputs -%}
{%- if output["description"] not in host_groups -%}
{%- do host_groups.update({output["description"]: []}) -%}
{%- endif -%}
{%- set index = host_groups[output["description"]]|length + 1 -%}
{%- do host_groups[output["description"]].append({"net_info": {"ip": output["output_value"]}, "index": index }) -%}
{%- endfor -%}
{{ { 'vm_list': host_groups } | to_yaml }}
推荐阅读
- html - 定位绝对 iframe 不正确的宽度和高度
- javascript - 调用函数 loginByFacebook() 后更新面板不起作用
- c# - 实现无限枚举器和枚举器是一种不好的做法吗?
- r - ggplot2中的多层
- computer-vision - 机器视觉 - 散列图像
- javascript - 单击按钮时启动计时器不起作用Javascript
- sql - SQL Server 结果所有可能的排序
- jmeter - 用csv参数化Jmeter问题中的变量
- excel - 创建可在多个 Excel 工作簿中使用的公共变量
- javascript - 如何使用 TypeScript 键入类似 jQuery 的初始化模式?