Jef*_*bro 5 ansible ansible-playbook ansible-2.x
我是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"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已设法删除该行,我只剩下
net.ifnames=0, audit=1
Run Code Online (Sandbox Code Playgroud)
当我使用像
lineinfile:
state: present
dest: /etc/default/grub
backrefs: yes
regexp: "net.ifnames=0"
line: "\1 audit=1"
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
Kon*_*rov 11
你可以试试这个:
- lineinfile:
state: present
dest: /etc/default/grub
backrefs: yes
regexp: '^(GRUB_CMDLINE_LINUX=(?!.*audit)\"[^\"]+)(\".*)'
line: '\1 audit=1\2'
Run Code Online (Sandbox Code Playgroud)
这将audit=1在关闭双引号之前添加.
它试图成为幂等的:与GRUB_CMD之后已经有审计字的行不匹配...
我建议先使用像regex101这样的网站来测试你的正则表达式(那里还有一个替换模式).
如果对结果满意,请继续执行ansible任务.
我想确保参数也设置为正确的值,因此我使用了此替换调用:
replace:
path: /etc/default/grub
regexp: '^(GRUB_CMDLINE_LINUX=(?:(?![" ]{{ option | regex_escape }}=).)*"?)\s*(?:{{ option | regex_escape }}=\S+\s*)?(.*")$'
replace: '\1 {{ option }}={{ value }}\2'
vars:
option: audit
value: 1
Run Code Online (Sandbox Code Playgroud)
如果该选项以前不存在,如果该选项存在但有错误的选项(仅更改当时的值),并且如果整个字符串为空(但随后在选项之前添加一个空格),则此方法有效。此外,它可以regex_escape正确处理包含点等的选项名称,并且您只需指定它们一次。
| 归档时间: |
|
| 查看次数: |
4934 次 |
| 最近记录: |