Ansible lineinfile - 修改一行
Ansible lineinfile - modify a line
我是 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: " audit=1"
这可以做到吗?
你可以试试这个:
- lineinfile:
state: present
dest: /etc/default/grub
backrefs: yes
regexp: '^(GRUB_CMDLINE_LINUX=(?!.* audit)\"[^\"]+)(\".*)'
line: ' audit=1'
这将在关闭双引号之前添加 audit=1
(带有前导 space)。没有双引号就不会匹配。
并且它试图做到幂等:不匹配 GRUB_CMDLINE_LINUX=
.
之后已经有 audit
(带有前导 space)的行
我建议先使用 regex101 等网站来测试您的正则表达式(那里也有替换模式)。
当您对结果感到满意时,继续执行 Ansible 任务。
我想确保参数也设置为正确的值,所以我使用了这个替换调用:
replace:
path: /etc/default/grub
regexp: '^(GRUB_CMDLINE_LINUX=(?:(?![" ]{{ option | regex_escape }}=).)*)(?:[" ]{{ option | regex_escape }}=\S+)?(.*")$'
replace: ' {{ option }}={{ value }}'
vars:
option: audit
value: 1
如果该选项以前不存在,如果它存在但有错误的选项(然后仅更改值)并且整个字符串为空(但在选项前添加 space然后)。此外,它使用 regex_escape
来正确处理包含点等的选项名称,您只需指定一次。
我是 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: " audit=1"
这可以做到吗?
你可以试试这个:
- lineinfile:
state: present
dest: /etc/default/grub
backrefs: yes
regexp: '^(GRUB_CMDLINE_LINUX=(?!.* audit)\"[^\"]+)(\".*)'
line: ' audit=1'
这将在关闭双引号之前添加 audit=1
(带有前导 space)。没有双引号就不会匹配。
并且它试图做到幂等:不匹配 GRUB_CMDLINE_LINUX=
.
audit
(带有前导 space)的行
我建议先使用 regex101 等网站来测试您的正则表达式(那里也有替换模式)。
当您对结果感到满意时,继续执行 Ansible 任务。
我想确保参数也设置为正确的值,所以我使用了这个替换调用:
replace:
path: /etc/default/grub
regexp: '^(GRUB_CMDLINE_LINUX=(?:(?![" ]{{ option | regex_escape }}=).)*)(?:[" ]{{ option | regex_escape }}=\S+)?(.*")$'
replace: ' {{ option }}={{ value }}'
vars:
option: audit
value: 1
如果该选项以前不存在,如果它存在但有错误的选项(然后仅更改值)并且整个字符串为空(但在选项前添加 space然后)。此外,它使用 regex_escape
来正确处理包含点等的选项名称,您只需指定一次。