использование lineinfile для вставки строки, но не работает должным образом
Я использую lineinfile
для вставки строки в файл системного журнала. Вот мой системный журнал:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Я бы хотел добавить compress
а также delaycompress
после missingok
. Вот мой код:
- name: "Adding compress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertafter: "^missingok"
line: " compress"
firstmatch: yes
state: present
- name: "Adding delaycompress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertbefore: "^sharedscripts"
line: " delaycompress"
firstmatch: yes
state: present
Но это добавление обоих в конец файла (в последних строках).
Примечание: я добавил 4 пробела передcompress
а также delaycompress
.
1 ответ
Это происходит потому, что курсор ^
в регулярном выражении соответствует началу строки без использования каких-либо символов.
И потому что у вас есть пробелы перед missingok
а также sharedscripts
, ваш insertafter
а также insertbefore
регулярное выражение ничего не соответствует.
Чтобы исправить это, вы можете разрешить пробелы и пробелы только в начале строки с помощью \s
который соответствует любому пробелу, символу табуляции или новой строки и звездочке *
который соответствует нулю или более последовательных символов.
Итак, правильное регулярное выражение было бы
Протестируйте здесь^\s*missingok
^\s*sharedscripts
И исправление для ваших задач будет:
- name: "Adding compress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertafter: "^\\s*missingok"
line: " compress"
firstmatch: yes
state: present
- name: "Adding delaycompress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertbefore: "^\\s*sharedscripts"
line: " delaycompress"
firstmatch: yes
state: present
Обратите внимание: поскольку Ansible - это приложение Python, обратная косая черта\
имеют особое значение и от них нужно избавляться.