问题描述
- name: Testing
hosts: localhost
gather_facts: False
tasks:
- name: Set things
set_fact:
my_things:
- parameters:
dog: true
opts:
DO_THIS: true
DO_THAT: "false"
role: Samba
action: dance
- parameters:
cat: true
opts:
DO_THIS: no
DO_THAT: "yes"
role: Funk
action: dance
我想用 jinja2 模板编写,如下所示:
apiVersion: v1
kind: ConfigMap
Metadata:
name: "test"
data:
myfile.yml: |+
---
dancers:
{% for thing in my_things %}
- {{ thing.action }}:
{% for key,value in thing.parameters.items() %}
{% if value is string and not (value) %}
{{ key }}: "{{ value }}"
{% elif value is mapping %}
{{ key }}:
{{ value | to_nice_yaml | indent(12) -}}
{% elif value | bool %}
{{ key }}: {{ (value) }}
{% elif not value | bool %}
{{ key }}: {{ (value) }}
{% else %}
{{ key }}: {{ value | to_yaml }}
{% endif %}
{% endfor %}
{% endfor %}
这是在做它的事情,但它看起来非常丑陋,如果 mapping
中有 mapping
,它也会损坏。理想情况下,我想做这样的事情:
apiVersion: v1
kind: ConfigMap
Metadata:
name: "test"
data:
myfile.yml: |+
---
dancers:
{% for thing in my_things %}
- {{ thing.action }}:
{% thing.parameters | to_yaml %}
这适用于 role
、dog
和 cat
,但对 opts
无效,因为它不是递归的。
由于我使用 operator-sdk 和 lookup
过滤器部署此配置映射,因此我无法使用 jinja 的 env
编写自定义过滤器。
- name: 'Creating v1.ConfigMap'
community.kubernetes.k8s:
deFinition: "{{ lookup('template','my_template.yml.j2') }}"
因此,我的问题是:有没有办法内联一些 Python 代码,或者有没有类似递归 to_yaml
过滤器的东西?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)