Я пытаюсь убедиться, что строка заканчивается на «audit = 1" ». Состояние« до »:
GRUB_CMDLINE_LINUX =" crashkernel = auto rd.lvm.lv = vg00 / lv_root rhgbquiet "
Состояние после должно быть:
GRUB_CMDLINE_LINUX =" crashkernel = auto rd.lvm.lv = vg00 / lv_root rhgb quiet аудит = 1 "
Работая с модулем Ansible lineinfile, я могу добавить это утверждение, если оно отсутствует, но повторные запуски продолжают добавлять 'audit = 1 "', даже если он присутствует. Я играл с регулярным выражением и отрицательными прогнозными утверждениями и просто не могу получить правильный синтаксис.
Вот пример игры, которую я имею:
- name: grub - adjust
lineinfile:
path: /home/vwadmin/grub-test
regexp: '(GRUB_CMDLINE_LINUX=.*)"(?!audit=1")'
line: '\1 audit=1"'
backrefs: yes
state: present
Редактировать: Используя предложение Пацифиста Iесть рабочее решение. Подтвердил добавление моего аудита = 1, если оно отсутствует, и ничего не делать, если оно присутствует.
- name: grub - check
shell: grep -c 'audit' /etc/default/grub
register: grub_file
ignore_errors: true
- name: grub - adjust
lineinfile:
path: /etc/default/grub
regexp: '(GRUB_CMDLINE_LINUX=.*)"'
line: '\1 audit=1"'
backrefs: yes
state: present
when: grub_file.stdout == "0"
Примечание: я не могу не почувствовать причину, по которой я не смог заставить ее работать без предварительного шага,и почему он не работает должным образом с check_mode, заключается в том, что отрицательный прогноз не определен правильно для этого случая. Из того, что я понимаю, совпадение регулярного выражения должно потерпеть неудачу, когда отрицательный упреждающий запрос будет успешным, что должно заставить модуль не предпринимать действий. Глядя на другой пример этого на GG , мне интересно, является ли коренная проблема жадным характером подстановочного знака. * В первом совпадении группы. / Пожав плечами