如何在ansible中使用jinja2模板创建一个包含多个条目的json文件?
我正在尝试创建一个包含多个机密(字典)和存储类的json文件。但模板的创建方式是,它将创建多个json文件,每个文件中包含一个机密和一个存储类 我的模板(resources.j2)如下所示如何在ansible中使用jinja2模板创建一个包含多个条目的json文件?,json,ansible,jinja2,Json,Ansible,Jinja2,我正在尝试创建一个包含多个机密(字典)和存储类的json文件。但模板的创建方式是,它将创建多个json文件,每个文件中包含一个机密和一个存储类 我的模板(resources.j2)如下所示 "secret": [ { "name": "secret{{ user_name }}", "label": "{{ user_name }}", &quo
"secret": [
{
"name": "secret{{ user_name }}",
"label": "{{ user_name }}",
"backend": "{{ local_array_ip }}",
"username": "{{ user_name }}",
"password": "{{password | default('test123')}}",
"namespace": "{{ default_namespace }}"
}
],
"storageclass": [
{
"name": "sc{{ user_name }}",
"secret": "{{ user_name }}",
"label": "sc-{{ user_name }}",
"limitMbps": "800",
"fstype": "xfs",
"accessProtocol": "{{ protocol }}"
}
]
}
我在一个称为in-loop的库文件中创建json
- name: Create config files for mulitple users
include: lib/create_config_for_multiple_users.yaml
vars:
user_name: "{{ userName }}{{iterationCount}}"
with_sequence: count="5"
loop_control:
loop_var: iterationCount
在Create_config_for_multiple_users.yml中,它为每个用户创建json文件(因此总共创建了5个json文件)。下面给出了从模板创建json文件的过程
- set_fact:
tmp_dynamic_json_file: "/tmp/temp-json-{{User}}-{{ lookup('pipe', 'date +%Y-%m-%d-%H-%M-%s') }}.json"
- name: Create dynamic Json file with user
template:
dest: "{{tmp_dynamic_json_file}}"
src: "resources.j2"
delegate_to: localhost
实际上,我想要一个包含多个条目的json文件,如下所示
"secret": [
{
"name": "secrettest1",
"label": "test1",
"backend": "{{ local_array_ip }}",
"username": "test1",
"password": "test123",
"namespace": "kube-system"
},
{
"name": "secrettest2",
"label": "test2",
"backend": "{{ local_array_ip }}",
"username": "test2",
"password": "test123",
"namespace": "kube-system"
}
],
"storageclass": [
{
"name": "sctest1",
"secret": "test1",
"label": "sc-test1",
"limitMbps": "800",
"fstype": "xfs",
"accessProtocol": "iscsi"
},
{
"name": "sctest2",
"secret": "test2",
"label": "sc-test2",
"limitMbps": "800",
"fstype": "xfs",
"accessProtocol": "iscsi"
}
]
}
我不知道如何创建一个只会创建一个json的模板。您正在为多个用户创建
create\u config\u。yaml
任务有效地迭代模板:
任务。如果模板任务运行多次,则会创建多个模板。在这种情况下,迭代应该在模板中。模板任务只能使用/调用一次
请参见下面的示例剧本。我和你一样包括一个任务文件,但这并不重要
vars:
用户名:“测试”
本地_阵列_ip:'192.168.1.1'
默认名称空间:“kube系统”
协议:“iscsi”
任务:
-名称:为多个用户创建配置文件
包括:create_config.yml
然后在我的create_config.yml
中,我使用模板模块:
-name:使用用户创建动态Json文件
模板:
dest:“/tmp/resources.json”
src:'resources.json.j2'
然后是模板resources.json.j2
中用户编号的迭代:
{
"secret": [
{% for user_num in range(1, 6) %}
{
"name": "secret{{ userName }}{{ user_num }}",
"label": "{{ userName }}{{ user_num }}",
"backend": "{{ local_array_ip }}",
"username": "{{ userName }}{{ user_num }}",
"password": "{{ password | default('test123') }}",
"namespace": "{{ default_namespace }}"
}{% if user_num < 5 %},{% endif %}
{% endfor %}
],
"storageclass": [
{% for user_num in range(1, 6) %}
{
"name": "sc{{ userName }}{{ user_num }}",
"secret": "{{ userName }}{{ user_num }}",
"label": "sc-{{ userName }}{{ user_num }}",
"limitMbps": "800",
"fstype": "xfs",
"accessProtocol": "{{ protocol }}"
}{% if user_num < 5 %},{% endif %}
{% endfor %}
]
}