Как заменить выражения Jinja2 внутри выражений? - PullRequest
0 голосов
/ 01 апреля 2020

Я использую Ansible шаблоны и импортирую переменные из внешнего файла app_vars.yml:

# App list
apps:
- app1

# App1 vars
app1:
  environments:
  - demo
  - test
  filebeat_properties:
    paths:
    - /home/_env_-app/logs/_env_-*.log
    fields:
      app_id: _env_

В шаблоне filebeat_template.yml В настоящее время я просто заменяю _env_ строка с env из for l oop с использованием фильтра replace(), подобного следующему:

{% for app in apps %}
  {% for env in vars[app]["environments"] %}
- type: log
  enabled: true
  {{ vars[app]["filebeat_properties"] | to_nice_yaml(indent=2, width=9999) | indent(2) | replace("_env_", env) }}
  {% endfor %}
{% endfor %}

Но мне было интересно, есть ли какой-то синтаксис, который позволяет помечать выражение Jinja для выражения заменить в файле app_vars.yml? Вроде как

...
paths:
- /home/{{ env }}-app/logs/_env_-*.log
fields:
  app_id: {{ env }}

, где {{ env }} нужно заменить в файле шаблона на переменную for l oop env? Добавление "" вокруг него делает его просто строкой.
Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2020

Почему бы вам не попробовать использовать {{ env }} непосредственно в вашем файле var?

Я делаю это сам, например,

grafana_security:
  admin_user: "{{ metadata_owner }}-{{ metadata_environment }}-admin"

Попробуйте, с фактические переменные это должно работать. Но позже, будьте осторожны с приоритетом переменных . Для приведенного выше примера я определяю свой metadata_* в group_var/somegroup.yml, приведенный выше фрагмент находится в другом group_var/monitoring.yml, и таким образом он работает. Я пробовал другие комбинации, которые не были, например, использование значения из default / main.yml роли в group_vars / something.yml.

...