我有一个 yml 文件,我以一个条件启动它
{% if inventory.parameters.access_groups.dev is defined %}
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev
namespace: {{ inventory.parameters.namespace }}
...
{% endif %}
对于某些应用程序,此 inventory.parameters.access_groups.dev 参数将存在,但对于其他应用程序,则不会。
库存示例,其中:
parameters:
access_groups:
dev:
- maingroup
据我了解,如果存在此参数 inventory.parameters.access_groups.dev,则只有条件内的执行才会发生。如果没有参数,则不应执行。
但是当我编译 kapitan 并且我引用的库存中没有这个变量时,我收到错误: Jinja2 error: failed to render /kapitan/templates/helm/app_rbac_dev.yml: Jinja2 TemplateError: 'dict object'没有属性“access_groups”,位于 /kapitan/templates/helm/app_rbac_dev.yml:1
请告诉我如何在 yml 中设置条件,以便在没有 inventory.parameters.access_groups.dev 变量的情况下,这种情况根本不会发生?使用“已定义”对我不起作用。
您无法访问丢失的嵌套变量。在这种情况下,它帮助了我: {% if inventory.parameters.access_groups is Defined %} {% if inventory.parameters.access_groups.dev is Defined %}
也就是说,一开始检查是否存在较高级别的变量,如果已经存在,则检查是否存在较低级别的变量