Как однократно добавить строку в файл с помощью Ansible?

Дано:
Файл /etc/network/interfaces
Условия:
В файле уже есть настройки которые менять не стоит.
Задача:
Добавить в файл строку foo после строки bar, но только один раз. Второй прогон playbook ничего добавлять не должен. Строка foo нужна только одна
Мои попытки:
Знаю как это сделать с помощью модуля сommand и sed, но ищу родное решение в Ansible
Попытки решить с помощью lineinfile либо уничтожали строку bar, либо добавляли foo при каждом прогоне ansible-playbook.

Заранее спасибо за ценные советы
  • Вопрос задан
  • 10378 просмотров
Решения вопроса 1
@aardvarkx1
Сейчас попробовал добавить строку в файл с помощью lineinfile и все работает как и должно. Строка добавляется и при повторном запуске не происходит повторного добавления.
Вот пример как описывал для ansible.
- name: insert line in file
lineinfile: dest=/tmp/ans insertafter="^bar" line="foo"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
dizballanze
@dizballanze
Software developer at Yandex
Сделайте шаблон файла interfaces и просто используйте модуль template, который в вашем шаблоне заменит {{ foo }} на то, что нужно и заменит /etc/network/interfaces. Т.к. результат рендеринга шаблона при одних и тех же значениях foo одинаковый - можно спокойно прогонять playbook любое количество раз.
Ответ написан
Прочитайте, наконец, документацию docs.ansible.com/lineinfile_module.html и используйте параметр regexp для определения части строки или полной строки для замены.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы