При работе с модулями 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
.