问题描述
我在以下场景中挣扎:
在 /etc/default/grub 文件中,有 GRUB_CMDLINE_LINUX_DEFAULT 节, 我需要在行尾插入 audit=1如果值不存在 (注意行尾有引号字符)。如果 audit=0 存在,请将其更改为 audit=1。
lineinfile ansible 模块不起作用,尤其是在最后一个引号 (") 之前插入。
原来的/etc/default/grub:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi="
可选的 /etc/default/grub:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi= audit=0" # change audit=0 to audit=1
#OR:
#GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi= audit=1" # audit=1 is already here,so no action needed
所需的/etc/default/grub:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi= audit=1"
解决方法
我创建了一个文件,其中文本为 audit=0 并尝试将其替换为 audit=1
我的文件是: grub 文件:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi= audit=0"
我的剧本:
---
- name: read grub file
lineinfile:
dest: /home/myhome/grubfile.txt
regexp: '^(.*)audit=0(.*)$'
line: '\1audit=1\2'
backup: yes
backrefs: yes
基本上我们使用正则表达式,将audit=1作为正则表达式,并用backrefs存储字符串的其余部分 生成的文件是:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=xfs quiet splash acpi_osi= audit=1"
编辑: 这段代码即使不存在也会添加它,如果audit=0存在,它会先修改,然后检查audit=1是否存在,如果不存在,将audit=1附加到开头报价:
---
- name:
lineinfile:
dest: /home/mypath/grubfile.txt
regexp: '^(.*)audit=1(.*)$'
state: absent
check_mode: yes
changed_when: false
register: auditexist
- name: if audit=0 write audit=1
lineinfile:
dest: /home/mypath/grubfile.txt
regexp: '^(.*)audit=0(.*)$'
line: '\1audit=1\2'
backup: yes
backrefs: yes
register: auditmodified
- name: appen
lineinfile:
dest: /home/ivan/grubfile.txt
regexp: '^(.*)GRUB_CMDLINE_LINUX_DEFAULT="(.*)$'
line: '\1GRUB_CMDLINE_LINUX_DEFAULT="audit=1 \2 '
backup: yes
backrefs: yes
when: not auditexist.found and not auditmodified.changed
结果:
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="audit=1 rootfstype=xfs quiet splash acpi_osi="