如何使用 Ansible 有条件地在文件中附加一行?

如何使用 Ansible 有条件地在文件中附加一行?

我正在尝试创建一个设置修剪/丢弃的 Ansible 任务。我有一个剧本可以处理其他所有事情(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'

答案1

我非常确定您的问题与正则表达式有关。您需要将前瞻断言移到通配符前面,以便仅匹配不以 结尾的行discard。例如,^(?!.* discard$)(.*)$

进行此项更改后,您还会遇到一个额外的问题,即空行也会匹配 - 这可能是不理想的。使用类似 的方法^(?!.* discard$)(.+)$来修复此问题,方法是将一个或多个字符与 匹配.+(而不是零个或多个,.*)。

或者,您可以使用后视断言,如 所示^(.+)(?<! discard)$

相关内容