jinja2文件

  1. modules:
  2. {% for item in ipmi_nodes %}
  3. {{ item.ip }} :
  4. user: "{{ item.user | default("root") }}"
  5. pass: "{{ item.pass | default("99cloud") }}"
  6. driver: "{{ item.driver | default("LAN_2_0") }}"
  7. privilege: "{{ item.privilege | default("admin") }}"
  8. collectors: {{ item.collectors | default(["bmc", "ipmi", "chassis", "dcmi"]) }}
  9. {% endfor %}

yaml文件

  1. ---
  2. ipmi_nodes:
  3. - ip: 172.16.140.202
  4. - ip: 172.16.140.203
  5. - ip: 192.168.2.105
  6. pass: "Huawei12$#"
  7. collectors: "['dcmi', 'ipmi']"

yaml文件作为数据源输入,jinja按照jinja2文件格式渲染数据,生成下面的文件

  1. modules:
  2. 172.16.140.202 :
  3. user: "root"
  4. pass: "99cloud"
  5. driver: "LAN_2_0"
  6. privilege: "admin"
  7. collectors: ['bmc', 'ipmi', 'chassis', 'dcmi']
  8. 172.16.140.203 :
  9. user: "root"
  10. pass: "99cloud"
  11. driver: "LAN_2_0"
  12. privilege: "admin"
  13. collectors: ['bmc', 'ipmi', 'chassis', 'dcmi']
  14. 192.168.2.105 :
  15. user: "root"
  16. pass: "Huawei12$#"
  17. driver: "LAN_2_0"
  18. privilege: "admin"
  19. collectors: ['dcmi', 'ipmi']

对于collectors的渲染,需要数据格式为字符串,如 "strings" ,然后将 ['dcmi', 'ipmi'] 以jinja2文件对应的格式 collectors: {{ item.collectors | default(["bmc", "ipmi", "chassis", "dcmi"]) 渲染成 collectors: ['dcmi', 'ipmi']

以下格式如何渲染呢?

  1. - ip: 192.168.2.105
  2. pass: "Huawei12$#"
  3. collectors:
  4. - ipmi
  5. - dcmi

包含unicode字符串默认渲染带 u

yaml文件

  1. source_index: [ifIndex]

配置一

jinja2文件

  1. source_index: {{ item }}

output:

  1. source_index: [u'ifIndex']

配置二

jinja2文件

  1. source_index: [{{ item | list | join('\',\'') }}

output:

  1. source_index: [ifIndex]

参考

  1. ansible-template-adds-u-to-array-in-template