Ansible: настраиваемые имена файлов шаблонов - PullRequest
0 голосов
/ 10 декабря 2018

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

{{ Client }}DataSourceContext.xml

, который мне нужно изменить, скажем, на

AcmeDataSourceContext.xml

У меня есть много файлов такого типа, которые должны бытьустановлены в разных каталогах, но все копии одного файла попадают в один каталог.Если бы мне не нужно было менять их имена или дублировать их, я мог бы обработать целую кучу таких файлов с помощью чего-то вроде

- name: Process a whole subtree of templates
  template:
    src: "{{ item.src }}"
    dest: "/path/to/{{ item.path }}"
  with_filetree: ../templates/my-templates/
  when: item.state == 'file'

Я думаю, что мне бы хотелось, чтобы это волшебный consider_filenames_as_templates переключатель, который повернулпо предварительной обработке имени файла.Есть ли способ приблизить это поведение?

1 Ответ

0 голосов
/ 10 декабря 2018

Практически везде, где вы можете поместить буквальное значение в Ansible, вы можете вместо этого подставить значение переменной.Так, например, вы можете сделать что-то вроде этого:

- template:
    src: sometemplate.xml
    dest: "/path/to/{{ item }}DataSourceContext.xml"
  loop:
    - client1
    - client2

Это приведет к созданию шаблонов /path/to/client1DataSourceContext.xml и /path/to/client2DataSourceContext.xml.

Обновление 1

Для вопроса, который вы задали в своем обновлении:

Полагаю, что мне бы хотелось, чтобы это был волшебный переключательдумка_файлов_символов, включающая предварительную обработку имени файла.Есть ли способ приблизить это поведение?

Похоже, вы могли бы просто сделать что-то вроде:

- name: Process a whole subtree of templates
  template:
    src: "{{ item.src }}"
    dest: "/path/to/{{ item.path.replace('__client__', client_name) }}"
  with_filetree: ../templates/my-templates/
  when: item.state == 'file'

То есть заменить строку __client__ в ваших именах файлов назначение переменной client_name.

...