Ansible: вставить слово в GRUB cmdline - PullRequest
0 голосов
/ 25 апреля 2019

Я бы хотел использовать linesfile или заменить модуль Ansible, чтобы добавить слово splash в строку команд в GRUB.

Это должно работать для всех следующих примеров:

Пример 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: вставить одно слово в существующую строку в файле объяснил, как это можно сделать без кавычек.Однако я не могу заставить его вставить слово в кавычки.

Какая обязательная запись в роли или сборнике Ansible для добавления слова splash в строку cmdline, как показано?

1 Ответ

0 голосов
/ 25 апреля 2019

Возможным решением является определение двух записей следующим образом:

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

Объяснение: Сначала мы проверяем, присутствует ли ключевое слово splash в требуемой строке, используя grep. Поскольку grep дает отрицательный код возврата, когда строка не найдена, мы подавляем ошибки, используя failed_when: false. Выходные данные grep сохраняются в переменной grub_cfg_grep.

Далее мы связываем модуль замены с условием, что ключевое слово splash находится в стандартном выводе grep. Регулярное выражение берет старый контент в кавычках и добавляет ключевое слово splash позади него.

Примечание. В случае пустой строки перед выполнением результат будет иметь вид " splash" (с пробелом впереди), но это все еще допустимая строка cmdline.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...