Jinja2嵌套变量



下面是我的jinja2模板文件和用于填充它的变量。然而,我想包括一个新的部分,只有当aditional_keys = true。这可能吗?

我的变量

- { name: 'container1', version: '1.0.0.0', port: '', registry_path: 'container1', replicas: '1', namespace: 'general', aditional_keys: 'false'}  
- { name: 'container2', version: '3.6.14.1', port: '8080', registry_path: 'container2', replicas: '1', namespace: 'general', aditional_keys: 'true'}   

我的模板
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ item.name }}
environment: {{ location }}_{{ env }}
name: {{ item.name }}
namespace: "{{ item.namespace }}"
spec:
replicas: {{ item.replicas }}
selector:
matchLabels:
app: {{ item.name }}
environment: {{ location }}_{{ env }}
template:
metadata:
labels:
app: {{ item.name }}
environment: {{ location }}_{{ env }}
spec:
containers:
- envFrom:
- configMapRef:
name: {{ item.name }}      
image: registry.com/{{ item.registry_path }}:{{ item.version }}
imagePullPolicy: Always
name: {{ item.name }}
ports:
- containerPort: {{ item.port }}
protocol: TCP

我试着添加这个,但我显然没有正确调用变量

{% if item.additional_keys == true %}
env:
- name: PRIVATE_KEY
valueFrom:
secretKeyRef:
key: id_{{ item.name }}_rsa
name: id-{{ item.name }}-rsa-priv
optional: false
- name: PUBLIC_KEY
valueFrom:
secretKeyRef:
key: id_{{ item.name }}.pub
name: id-{{ item.name }}-rsa-pub
optional: false
{% else %}
{% endif %}

首先,与布尔值的文字比较是您可能想要遵循的ansible-lint规则之一。

现在在你上面的例子中有两个真正的问题。

  1. 你有一个错字在你的变量定义(aditional_keys),而你拼写正确在你的模板(additional_keys)
  2. 你的变量被指定为字符串('false'),而你期望一个布尔值(false)。同时,它经常发生在可见的,正确的布尔值可以在解析时转换为字符串(例如,命令行上的extra_vars)。为了克服这个问题,最好的做法是当您不完全信任源时,使用bool过滤器系统地将值转换为布尔值。

一旦你将var文件中的变量名和布尔定义修改为additional_keys: false,模板中的以下条件将确保你不会再遇到这样的麻烦:

{% if item.additional_keys | bool %}

相关内容

  • 没有找到相关文章

最新更新