如何在ansible中使用jinja2模板创建一个包含多个条目的json文件?

如何在ansible中使用jinja2模板创建一个包含多个条目的json文件?,json,ansible,jinja2,Json,Ansible,Jinja2,我正在尝试创建一个包含多个机密(字典)和存储类的json文件。但模板的创建方式是,它将创建多个json文件,每个文件中包含一个机密和一个存储类 我的模板(resources.j2)如下所示 "secret": [ { "name": "secret{{ user_name }}", "label": "{{ user_name }}", &quo

我正在尝试创建一个包含多个机密(字典)和存储类的json文件。但模板的创建方式是,它将创建多个json文件,每个文件中包含一个机密和一个存储类

我的模板(resources.j2)如下所示

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