Есть ли модуль для сборки файлов конфигурации, поддержки Jinja2-шаблонов, а также удаления записи при удалении исходного шаблона? - PullRequest
0 голосов
/ 20 июня 2019

При работе с модулями Ansible, в частности assemble и blockinfile, я заметил несколько недостатков обоих модулей. Это может быть нехватка образования в модуле или намеренный дизайн.

Собрать

Например, при работе с assemble я могу прочитать в каталоге файлов и «собрать» их в один файл конфигурации, например, так:

  assemble:
    src: <path to directory of files>
    dest: <destination>

Ожидается результат, один файл конфигурации, включающий все файлы, включенные в src. Однако при использовании переменных они не раскрываются. Что тоже ожидается. Я мог бы использовать lookup, который расширил бы эти переменные, однако я не знаю о таком поиске, который включал бы один каталог для использования с assemble.

Blockinfile

При работе с blockinfile я могу использовать lookup для расширения переменных в моем исходном файле.

  blockinfile:
    create: yes
    block: "{{ lookup('template', '<path to file>') }}"
    dest: <destination>
    marker: "# {mark} Test "
    backup: yes

Я мог бы также включить несколько файлов, таких как:

  blockinfile:
    create: yes
    block: "{{ lookup('template', \"<path>/{{ item }}\") }}"
    dest: <destination>
    marker: "# {mark} Test {{ item }}"
    backup: yes
  with_items:
    - file1.j2
    - file2.j2

Однако недостаток этого решения заключается в том, что если исходный файл шаблона удаляется, он не удаляется из файла, указанного в dest.

Конечная цель

Цель, которую я хотел бы достичь, будет выглядеть как

  • Чтение в каталоге файлов и сборка их в один файл.
  • Поддержка переменных. Когда {{ variable }} находится в исходном файле, увеличьте его до значения
  • Если один или несколько исходных файлов отсутствуют после предварительного добавления его в конечный файл, удалите его из конечного файла. Также иметь отчет о состоянии как changed.

1 Ответ

2 голосов
/ 21 июня 2019

Вы можете использовать основной шаблон, который включает другие шаблоны.

Документация Jinja для включения

Пример main.j2:

My first block
{% include block1.j2 %}

My second block
{% include block2.j2 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...