从Jinja2中的Ansible输出进行分类



我具有以下来自Ansible OS_STACK创建任务的输出:

"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 }}

最新更新