Сохранить структуру списка YAML в шаблонах Ansible - PullRequest
0 голосов
/ 31 марта 2020

Скажем, у меня есть переменный файл

---
app1:
    environments:
      - test
      - demo
    paths:
      - /home/someuser/_env_/*.log
      - /var/log/something/*.log
    id: _env_

, который включен в мою пьесу вот так

---
- hosts: all
  become: yes
  vars:
      apps:
        - app1
  vars_files:
    - ~/vars/app1_vars.yml
  tasks:
  - name: Update config
    template:
      src: foo.j2
      dest: /home/configurer/test.conf
      owner: configurer
      group: configurer
      mode: '0644'
      lstrip_blocks: yes

, а сам шаблон -

{% for app in apps %}
  {% for env in vars[app]['environments'] %}
  - type: log
    enabled: true
    paths:
      {% for path in vars[app]['paths'] %}
      - {{ path | replace("_env_", env) }}
      {% endfor %}
    fields:
      app_id: {{ vars[app]['id'] | replace("_env_", env) }}

  {% endfor %}
{% endfor %}

Это дает me as output

- type: log
  enabled: true
  paths:
    - /home/someuser/test/*.log
    - /var/log/something/*.log
  fields:
    app_id: test

- type: log
  enabled: true
  paths:
    - /home/someuser/demo/*.log
    - /var/log/something/*.log
  fields:
    app_id: demo

Есть ли более компактный и удобный способ перебора списка переменных paths и сохранения структуры списка YAML с - s?

1 Ответ

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

После некоторых экспериментов я сделал следующее:

  1. Изменен файл переменной:
---
app1:
  environments:
  - test
  - demo
  filebeat_properties:
    paths:
    - /home/someuser/_env_/*.log
    - /var/log/something/*.log
    fields:
      app_id: _env_
Используется to_nice_yaml для красивой печати конфигурации:
{% 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 %}
...