[英]Create Json file using Jinja2 template in ansible
我想根据可用数据创建动态 json 文件。 假设我有如下数据。 那么 jinja 模板应该创建 2 个列表。 如果数据可用 3 次,那么它应该在 jinja 模板中创建 3 个列表。
"datastore_details": [
{
"name": "XYZ",
"size": 6258
},
{
"name": "XYZ-1",
"size": 32192
}
]
{
"company": "Test",
"table": "data",
"message_id": "2022222",
"p_filter": {
"key": "u_topic",
"value": "test-datastore"
},
"c_filter": {
"key": "u_topic",
"value": "test-disk_capacity"
},
"p_data": [
{
"u_label": "XYZ",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "XYZ",
"c_data": [
{
"u_label": "XYZ",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "6258"
}
]
},
{
"u_label": "XYZ-1",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "XYZ-1",
"c_data": [
{
"u_label": "XYZ-1",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "32192"
}
]
}
]
}
我不确定如何在这里使用循环来运行 3 或 4 次,具体取决于数据。 使用下面的 jinja 模板。
{% for n in range(count) %}
"u_label": "{{ datastore_details[item | int]['name'] }}",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "{{ datastore_details[item | int]['size'] }}",
"c_data": [
{
"u_label": "{{ datastore_details[item | int]['name'] }}",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "{{ datastore_details[item | int]['size'] }}"
}
]
{% endfor %}
首先,您需要将这些变量放入 ansible。 最简单的方法是在清单中定义它们。 如果你不能这样做(例如因为这个 json 文件是在主机上生成的),你可以使用include_vars模块来加载变量。
假设您的变量可供 ansible 访问,您可以像这样在 jinja2 模板中循环遍历列表:
示例库存:
---
all:
hosts:
localhost:
ansible_connection: local
datastore_details:
- name: "XYZ"
size: 6258
- name: "XYZ-1"
size: 32192
- name: "as-many-as-you-want"
size: 1337
示例剧本:
---
- hosts: all
tasks:
# if you have your variables somewhere else, use the `include_vars` module here
- name: template
template:
src: tmpl.j2
dest: /tmp/out.file
示例模板:
... some data ...
{% for d in datastore_details %}
"u_label": "{{ d['name'] }}",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "{{ d['size'] }}",
"c_data": [
{
"u_label": "{{ d['name'] }}",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "{{ d['size'] }}"
}
]
... some data in between ...
{% endfor %}
... some more data ...
输出:
... some data ...
"u_label": "XYZ",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "6258",
"c_data": [
{
"u_label": "XYZ",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "6258"
}
]
... some data in between ...
"u_label": "XYZ-1",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "32192",
"c_data": [
{
"u_label": "XYZ-1",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "32192"
}
]
... some data in between ...
"u_label": "as-many-as-you-want",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "1337",
"c_data": [
{
"u_label": "as-many-as-you-want",
"u_catalog_item": "c08c7936db71d4503fa396f8f49619db",
"u_value": "1337"
}
]
... some data in between ...
... some more data ...
这里重要的是将您的数据作为变量,我使用清单来做,但是(如前所述)您可以使用include_vars
在您正在运行的主机上加载变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.