ansible Jinja2 JSON循环最后的元素

时间:2018-05-29 18:38:21

标签: ansible jinja2

我试图使用从ansible传递的变量从jinja2模板生成json文件。据我所知,这里没有可以帮助我的模块(需要纠正吗?)

我卡在最后一个循环上



{
  "items": [
    {% for host in hostvars %}
    {"apiversion": "v1",
    "lastrunupdate": "{{ hostvars[host]['date'] }}",
    "hostname": "null",
    "hostip": "{{ hostvars[host]['inventory_hostname'] }}",
    "whoami": "{{ hostvars[host]['whoamiraw'] }}",
    "serialnumber": "{{ hostvars[host]['serial'] }}",
    "version": "{{ hostvars[host]['version'] }}",
    "ipaddress": "{{hostvars[host]['ipaddressraw'] }}",
    "users": [
        {% for hosts in hostvars[host]['listofusersraw'] %}

         {"user":"{{ listofusersraw[loop.index0].split(':')[0] }}" } {% if not loop.last %},{%else%}]},{% endif %}{% endfor %} 



      {% endfor %}
}
]
}




最后一个循环广告},到json列表的末尾....

想法

提前致谢

1 个答案:

答案 0 :(得分:1)

你的jinja2中有一些额外的角色。添加逗号时删除else:

{

    "items": [
                {% for host in hostvars %}
                    {"apiversion": "v1",
                    "lastrunupdate": "{{ hostvars[host]['date'] }}",
                    "hostname": "null",
                    "hostip": "{{ hostvars[host]['inventory_hostname'] }}",
                    "whoami": "{{ hostvars[host]['whoamiraw'] }}",
                    "serialnumber": "{{ hostvars[host]['serial'] }}",
                    "version": "{{ hostvars[host]['version'] }}",
                    "ipaddress": "{{hostvars[host]['ipaddressraw'] }}",
                    "users": [

                        {% for hosts in hostvars[host]['listofusersraw'] %}

                            {"user": "{{ listofusersraw[loop.index0].split(':')[0] }}" }

                            {% if not loop.last %}
                              ,
                            {% endif %}

                        {% endfor %}
                            ]
                {% endfor %}
                    }
            ]
}
  

注意:我已将其拆分为更具可读性。