Как выполнить проверку на наличие переменной в Django template
У меня есть 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 будет, а для каких-то нет.
Пример inventory, где есть:
parameters:
access_groups:
dev:
- maingroup
Насколько я понимаю, если данный параметр inventory.parameters.access_groups.dev имеется, только тогда будет проходить выполнение, что находится внутри условия. Если же параметра нет, то и выполнения не должно происходить.
Но когда я выполняю компиляцию kapitan и у меня отсутствует данная переменная в inventory на которое я ссылаюсь, получаю ошибку: Jinja2 error: failed to render /kapitan/templates/helm/app_rbac_dev.yml: Jinja2 TemplateError: 'dict object' has no attribute 'access_groups', at /kapitan/templates/helm/app_rbac_dev.yml:1
Подскажите пожалуйста, как мне задать условие в yml, чтобы при отсутствии переменной inventory.parameters.access_groups.dev просто не происходило выполнение данного условия? Через "is defined" у меня не работает.
Ответы (1 шт):
Нельзя обращаться к отсутствующим переменным вложенным. В данном случае мне помогло: {% if inventory.parameters.access_groups is defined %} {% if inventory.parameters.access_groups.dev is defined %}
То есть в начале проверять наличие переменной более высокого уровня и если она уже есть проверять наличие переменной более низкого уровня