Ansible:在GRUB cmdline中插入单词

问题描述 投票:0回答:1

我想使用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所需的条目是什么?

regex ansible
1个回答
0
投票

一个可能的解决方案是两个条目的定义如下:

- 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。

© www.soinside.com 2019 - 2024. All rights reserved.