2016-09-30 2 views
2

Я новичок в Ansible и пытаюсь изменить строку в /etc/default/grub, чтобы включить аудит.Ansible lineinfile - изменить строку

мне нужно добавить audit=1 в кавычки где-то на линии, которая выглядит как:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap biosdevname=0 net.ifnames=0 rhgb quiet net.ifnames=0" 

До сих пор мне удалось удалить строку и я только ушел с

net.ifnames=0, audit=1 

когда Я использую что-то вроде

lineinfile: 
    state: present 
    dest: /etc/default/grub 
    backrefs: yes 
    regexp: "net.ifnames=0" 
    line: "\1 audit=1" 

Это можно сделать?

ответ

4

Вы можете попробовать это:

- lineinfile: 
    state: present 
    dest: /etc/default/grub 
    backrefs: yes 
    regexp: '^(GRUB_CMDLINE_LINUX=(?!.*audit)\"[^\"]+)(\".*)' 
    line: '\1 audit=1\2' 

Это добавит audit=1 только перед закрытием двойных кавычек.
И он пытается идемпотентным: не соответствует линии, которые уже имеют аудит слова после GRUB_CMD ...

Я рекомендовал бы использовать сайты, как regex101 проверить свои регулярные выражения первыми (есть также замена режим там).
Когда вы удовлетворены результатом, приступайте к выполнению задачи.

+0

@Jeff Bilbro - если вам нужно добавить его только к строкам с «net.ifnames = 0», вам нужно добавить это в строку регулярного выражения, которую предоставил Константин Сурворов. Возможно, что-то вроде этого: 'regexp: '^ (GRUB_CMDLINE_LINUX =. * Net.iframes = 0. * (?!. * Audit) \" [^ \ "] +) (\". *)' ' –

+0

Спасибо, ребята , это сработало отлично! –