Назад | Перейти на главную страницу

Ansible: поднять ошибку, если при замене не найдено ничего для замены

Как решить эту проблему в 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