Как однократно добавить строку в файл с помощью Ansible?
Дано:
Файл /etc/network/interfaces
Условия:
В файле уже есть настройки которые менять не стоит.
Задача:
Добавить в файл строку foo после строки bar, но только один раз. Второй прогон playbook ничего добавлять не должен. Строка foo нужна только одна
Мои попытки:
Знаю как это сделать с помощью модуля сommand и sed, но ищу родное решение в Ansible
Попытки решить с помощью lineinfile либо уничтожали строку bar, либо добавляли foo при каждом прогоне ansible-playbook.
Сейчас попробовал добавить строку в файл с помощью lineinfile и все работает как и должно. Строка добавляется и при повторном запуске не происходит повторного добавления.
Вот пример как описывал для ansible.
- name: insert line in file
lineinfile: dest=/tmp/ans insertafter="^bar" line="foo"
Сделайте шаблон файла interfaces и просто используйте модуль template, который в вашем шаблоне заменит {{ foo }} на то, что нужно и заменит /etc/network/interfaces. Т.к. результат рендеринга шаблона при одних и тех же значениях foo одинаковый - можно спокойно прогонять playbook любое количество раз.
Прочитайте, наконец, документацию docs.ansible.com/lineinfile_module.html и используйте параметр regexp для определения части строки или полной строки для замены.