2016-04-07 1 views
0

Я пишу Ansible playbook, который будет устанавливать и настраивать агента некоторой системы мониторинга, которую использует моя компания. Одним из шагов, необходимых для успешной настройки агента, является ежедневная настройка Nagios «log_rotation_method». Соответствующая строка в файле nagios.cfg является: log_rotation_method=h, который я хотел бы, чтобы Ansible изменился на log_rotation_method=d.Каков правильный синтаксис для поиска и замены в Ansible playbook?

Соответствующая часть пьес выглядит так:

- name: Set Nagios rotation method to daily 
    replace: dest=/etc/nagios3/nagios.cfg regexp='log_rotation_method=h' replace='log_rotation_method=d' 

В Баш я хотел бы написать что-то вроде этого:

sed -i 's/^log_rotation_method.*/log_rotation_method=d/g' nagios.cfg 

Но я с трудом понимая, как это должно быть написанный в Ansible, который основан на Python.

Любая идея, как это должно быть написано? Объяснение было бы более чем приветствованным.

+0

Попробуйте заменить: dest =/etc/nagios3/nagios.cfg regexp = '(? M)^log_rotation_method. *' Replace = 'log_rotation_method = d'' (или с '(? M)' удален) –

+0

note что, как это должно быть **, должно быть написано в «шаблоне». Модуль 'lineinfile' означает, что вы не обеспечиваете управление остальной конфигурацией nagios. – tedder42

ответ

0

Вы можете написать очень похожую вещь к тому, что можно было бы написать в Баш (они оба регэкспы в конце):

replace: dest=/etc/nagios3/nagios.cfg regexp='^log_rotation_method.*' replace='log_rotation_method=d' 

Он должен работать даже так, как вы писали. Он просто будет соответствовать этой точной строке вместо нескольких в случае регулярного выражения.

1

Я хотел бы сделать это с lineinfile:

- lineinfile: dest=/etc/nagios3/nagios.cfg regexp='^log_rotation_method.*' line='log_rotation_method=d'