Я пытаюсь создать задачу 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)$
.