Возможным решением является определение двух записей следующим образом:
- 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.