Есть ли простой способ развернуть папку, полную шаблона .j2, в папку linux, используя то же имя, что и шаблон, но без расширения .j2, вместо использования модуля шаблона для каждого файла?
Прямо сейчас у меня есть длинный список:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService
with_fileglob
всегда работает сfiles/
, вы можете добраться до шаблонов с../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
должно совпадать в конце строки\.j2$
для случаев, когда шаблон может существовать внутри имени файла.Майкл ДеХан (создатель Ansible) сделал пост на CoderWall, в котором говорится об очень похожей проблеме. Вы можете настроить и расширить его в соответствии с вашими потребностями (например, разрешения и права собственности). Соответствующая часть поста здесь:
Это можно упростить с помощью "
with_items
" и одногоnotify
оператора. Если какая-либо из задач изменится, служба будет уведомлена точно так же, как она должна перезапуститься в конце прогона playbook.Обратите внимание, что поскольку у нас есть задачи, которые принимают более одного уникального аргумента, мы не просто говорим «
item
» вtemplate:
строке «», но используемwith_items
переменную хеша (словаря). Вы также можете сделать это немного короче, используя списки, если хотите. Это стилистическое предпочтение:Конечно, мы могли бы также определить список, по которому вы шли, в другом файле, например, в
groupvars/webservers
файле " ", чтобы определить все переменные, необходимые дляwebservers
группы, или в файле YAML, загруженном изvarsfiles
директивы " " внутри книги воспроизведения. Посмотри, как это можно очистить, если мы это сделаем.источник
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf
, а затем использовать простой список элементов:with_items: - foo - bar
template: src={{item.src}} dest={{item.dest}}
(то есть,${var}
но не скорее{{var}}
)Ответ Рассела работает, но нуждается в улучшении
Едва все $ должны идти, поскольку это было неправильное регулярное выражение в regex_replace. Во-вторых, все файлы должны быть в каталоге файлов, а не в каталоге шаблонов.
источник
Я написал плагин поиска файлового дерева, который может помочь с действиями над деревьями файлов.
Вы можете просматривать файлы в дереве файлов и на основе свойств файлов выполнять действия (например, шаблон или копирование). Поскольку возвращается относительный путь, вы можете с легкостью воссоздать файловое дерево в целевых системах.
Это делает для более читаемых книг.
источник
Следующая команда сработала для меня, чтобы сделать рекурсивный поиск файлов j2 в шаблонах и переместить его в место назначения. Надеюсь, это поможет кому-то, ищущему рекурсивную копию шаблонов по назначению.
источник
Существует возможность автоматически получать список актуальных файлов из каталога и повторять их впоследствии.
источник
print0
, напримерfind
, и затем разделяется на\u0000
.