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

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

Заранее спасибо за ценные советы
  • Вопрос задан
  • 3984 просмотра
Решения вопроса 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 для определения части строки или полной строки для замены.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Vsemayki.ru Новосибирск
от 80 000 до 150 000 руб.
SAYMON Санкт-Петербург
от 100 000 до 200 000 руб.