我怎样才能使用Ansible有条件地在文件中添加一行?

我试图创build一个Ansible任务,设置修剪/丢弃。 我有一个处理所有其他事情(LVM,fstrim)的剧本,但我无法弄清楚如何正确configurationcrypttab

我试图使用replace模块来添加discard到每一行没有discard目前的结束,但我似乎无法得到的正则expression式(我认为这是我的问题无论如何)。

我有一个/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' 

我很确定你的问题是与正则expression式。 您需要将通配符前面的前瞻断言移至只匹配不以discard结束的行。 例如, ^(?!.* discard$)(.*)$

一旦你做了这个改变,你将会遇到一个额外的问题,那就是空行也会匹配 – 可能是不可取的。 使用类似于^(?!.* discard$)(.+)$ ,通过将一个或多个字符与.+ (而不是零个或多个, .* )进行匹配来解决此问题。

或者,可以使用lookbehind断言,如^(.+)(?<! discard)$