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

Как я могу использовать Ansible для условного добавления строки в файл?

Я пытаюсь создать задачу Ansible, которая устанавливает обрезку / отбрасывание. У меня есть playbook, который позаботится обо всем остальном (LVM, fstrim), но я не могу понять, как получить crypttab настроен правильно.

Я пытаюсь использовать заменить модуль для добавления discard до конца каждой строки, в которой нет discard присутствует, но я не могу правильно понять регулярное выражение (я думаю, что это моя проблема).

у меня есть /etc/crypttab файл, который выглядит примерно так:

luks-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn UUID=nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn none discard
luks-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn UUID=nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn none

И вот задача:

- name: ensure crypttab is configured to issue discards
  replace: dest=/etc/crypttab backup=yes
    regexp='^(.*(?! discard))$'
    replace='\1 discard'

Я почти уверен, что ваша проблема связана с регулярным выражением. Вам нужно будет переместить утверждение опережающего просмотра перед подстановочным знаком, чтобы соответствовать только строкам, которые не заканчиваются на discard. Например, ^(?!.* discard$)(.*)$.

После того, как вы сделаете это изменение, у вас возникнет дополнительная проблема в том, что пустые строки тоже будут совпадать - вероятно, нежелательно. Используйте что-нибудь вроде ^(?!.* discard$)(.+)$ чтобы решить эту проблему, сопоставив один или несколько символов с .+ (вместо нуля или более, .*).

В качестве альтернативы вы можете использовать утверждение просмотра назад, как в ^(.+)(?<! discard)$.