我是Ansible的新手,正在尝试修改/etc/default/grub中的一行以启用审核。

我需要在看起来像这样的一行的引号中添加audit=1:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap biosdevname=0 net.ifnames=0 rhgb quiet net.ifnames=0"

到目前为止,我设法删除了这一行,只剩下
net.ifnames=0, audit=1

当我使用类似
lineinfile:
  state: present
  dest: /etc/default/grub
  backrefs: yes
  regexp: "net.ifnames=0"
  line: "\1 audit=1"

能做到吗?

最佳答案

您可以尝试以下方法:

- lineinfile:
    state: present
    dest: /etc/default/grub
    backrefs: yes
    regexp: '^(GRUB_CMDLINE_LINUX=(?!.* audit)\"[^\"]+)(\".*)'
    line: '\1 audit=1\2'

这将在闭双引号之前添加audit=1(带前导空格)。没有双引号,它将不匹配。
而且它试图成为幂等的:与audit之后已经有GRUB_CMDLINE_LINUX=(带有前导空格)的行不匹配。

我建议先使用regex101之类的网站来测试您的正则表达式(那里也有替换模式)。
当您对结果感到满意时,请继续执行Ansible任务。

关于Ansible lineinfile-修改一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39795873/

10-16 06:11