Zamień wiersz w pliku na Ansible, upewniając się, że jest obecny
Używam Ansible i muszę zamienić wiersz w pliku. To jest plik konfiguracyjny Logrotate dla Apache.
/etc/logrotate.d/apache2... Przed zmianą - mówi linia
/var/log/apache2/*.log {
którym chcę zastąpić
/var/log/apache2/*.log/var/log/apache2/*/*.log {
Wolałbym nie nadpisywać całego pliku, aby nie wpływać na zawartość pliku config.
Mogę to zrobić
lineinfilemoduł:
- name: Configure logrotate for Apache
lineinfile:
dest:/etc/logrotate.d/apache2
regexp: '^(/var/log/apache2/\*\.log) (?:/var/log/apache2/\*/\*\.log )?{$'
# The backrefs option is required to ensure the line won’t just be
# added, breaking the syntax of the file…
backrefs: yes
line: '\1/var/log/apache2/*/*.log {'
Niestety, to zadanie powiedzie się (bez żadnej akcji), jeśli wyrażenie regularne nie pasuje do pliku konfiguracyjnego. Wolałbym, żeby się nie udało.
Rozwiązanie, które znalazłem to sprawdzenie konfiguracji dodatkowym zadaniem:
- name: Check logrotate’s configuration for Apache
command: egrep '^/var/log/apache2/\*\.log/var/log/apache2/\*/\*\.log {$'/etc/logrotate.d/apache2
changed_when: no
Wydaje się, że to działa, ale nie jestem zadowolony z duplikatu wyrażenia regularnego ...
Czy jest lepszy sposób na zmianę linii w przypadku awarii, jeśli jej brakuje?
Zauważ, że obecnie utknąłem na (dość starym) Ansible 2.2, ale nadal jestem zainteresowany rozwiązaniami, które działają z nowszymi wersjami.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
1 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
„Przed zmianą, mówi linia
którym chcę zastąpić
O: Poniższe zadanie spełnia swoje zadanie
lineinfile
https://docs.ansible.com/ansib ... .html
Pytanie:
„Czy istnieje lepszy sposób na zmianę linii w przypadku awarii, jeśli jej brakuje?”
O: Poniższe zadanie kończy się niepowodzeniem, gdy
szablon
nie w pliku konfiguracyjnym