Как решить эту проблему в Ansible?
У меня есть файл /etc/foo/foo.config
. Я хочу заменить в этом файле строку «DisallowBar» на «AlllowBarUntilMidnight».
В этих случаях Ansible должен действовать следующим образом:
Case3 для меня важен, так как этого состояния не должно быть. Это ошибка, и это не должно происходить незаметно.
Вы можете использовать validate
параметр заменить чтобы убедиться, что записываемый файл содержит AllowBarUntilMidnight
и больше не содержит DisallowBar
.
tasks:
- name: replace DisallowBar
replace:
path: /etc/foo/foo.config
regexp: 'DisallowBar'
replace: "AllowBarUntilMidnight"
validate: 'grep "AllowBarUntilMidnight" %s'
В validate
команда запускается для созданного временного файла, прежде чем он будет скопирован на место после replace
бежит. В этом случае, если grep
сбой, это означает, что замена не производилась, и ваш исходный файл никогда не содержал DisallowBar
начать с. Затем воспроизведение не удается, и файл не изменяется.
Вы можете просто положиться на поведение по умолчанию replace
функция, чтобы гарантировать, что файл не будет содержать строку DisallowBar
больше.
После выполнения этой задачи замены вам нужно только подтвердить, что файл действительно содержит строку AllowBarUntilMidnight
и выдаст ошибку, если этого не произойдет. Вы можете сделать это с помощью простого grep
.
tasks:
- name: replace DisallowBar
replace:
path: /etc/foo/foo.config
regexp: 'DisallowBar'
replace: "AllowBarUntilMidnight"
- name: Check for AllowBarUntilMidnight setting
shell: grep "AllowBarUntilMidnight" /etc/foo/foo.config