[英]sort data from ansible output in jinja2
我从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
但是我从AnsibleUndefinedVariable: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute u'i'
收到以下错误: 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 }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.