繁体   English   中英

从Jinja2中的ansible输出排序数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM