我想使用Ansible的lineinfile或替换模块,以便将单词splash
添加到GRUB中的cmdline。
它适用于以下所有示例:
例1:
GRUB_CMDLINE_DEFAULT=""
GRUB_CMDLINE_DEFAULT="splash"
例2:
GRUB_CMDLINE_DEFAULT="quiet"
GRUB_CMDLINE_DEFAULT="quiet splash"
例3:
GRUB_CMDLINE_DEFAULT="quiet nomodeset"
GRUB_CMDLINE_DEFAULT="quiet nomodeset splash"
后Ansible: insert a single word on an existing line in a file很好地解释了如何在没有引号的情况下完成这项工作。但是,我无法在引号中插入单词。
Ansible角色或playbook中为了将单词splash
添加到cmdline所需的条目是什么?
一个可能的解决方案是两个条目的定义如下:
- name: "Checking GRUB cmdline"
shell: "grep 'GRUB_CMDLINE_LINUX_DEFAULT=.*splash.*' /etc/default/grub"
register: grub_cfg_grep
changed_when: false
failed_when: false
- name: "Configuring GRUB cmdline"
replace:
path: '/etc/default/grub'
regexp: '^GRUB_CMDLINE_LINUX_DEFAULT="((\w.?)*)"$'
replace: 'GRUB_CMDLINE_LINUX_DEFAULT="\1 splash"'
when: '"splash" not in grub_cfg_grep'
说明:我们首先使用grep检查splash关键字是否出现在所需的行中。由于grep在找不到字符串时给出否定返回码,我们使用failed_when: false
来抑制错误。 grep的输出保存到grub_cfg_grep
变量中。
接下来,我们将replace模块绑定到关键字splash在grep的标准输出中的条件。正则表达式使用引号中的旧内容并在其后面添加splash关键字。
注意:如果在执行前有一个空字符串,结果会显示" splash"
(前面有一个空格),但它仍然是一个有效的cmdline。