Задать вопрос
@alvenysh

Как отредактировать nginx с помощью ansible?

Задача отредактировать файл не используя template
условно
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;

error_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxerrlog info;

access_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxacclog,severity=info combined;

всё это должно происходить в блоке server { }
какие при этом проблемы:
1 нельзя использовать template (а было бы так просто)
2 есть пересекающиеся значения
67d438c12197b912414619.jpeg
3 нельзя использовать ничего не из стандартных репозиториев (т.е. если даже есть в community или galaxy какая-нибудь подходящая коллекция, её использовать нельзя)
Что я пробовал и думал:
грепом найти значения не выйдет, т.к. есть пересекающиеся значения. Искать по полной строчке тоже не вариант, т.к. теоретически может быть такая ситуация, когда в строке у ip будет по ошибке одна цифра отличаться и тот же греп уже не найдет значения и я добавлю строку рядом.
По хорошему наверное нужен либо хороший awk скрипт, который будет искать только в нужном блоке (хотя спасёт ли это от задвоения?), либо что-то что я пропускаю.
Есть идеи как это организовать?
  • Вопрос задан
  • 1732 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
@alvenysh Автор вопроса
Всем спасибо, путём долгих переговоров и убеждений заказчика, таки удалось доказать что template использовать можно и нужно в данном случае (тем более, как оказалось, они изначальные конфиги сами шаблонами генерили, зачем было упрямиться?).
Вопрос закрыт, бесконечное количество нервов убито))
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
может, вынести строки в отдельный файл, инклюдить его в конфиг NGINX, ansible'ом изменять тот отдельный файл.
Ответ написан
opium
@opium
Просто люблю качественно работать
Начните с вопроса почему нельзя тимплейт
Отсюда у вас сразу же будет понятно кто идиот
Ощущение что вы хотите что то менять в файле ансиблом и другие люди ещё хотят его менять руками и вы боитесь что они криво поменяют и у вас что то сломается, этого бояться не надо, если козлы руками накосячат это их проблемы
Ответ написан
alexdjachenko
@alexdjachenko
Кроме template есть ещё blockinfile, lineinfile и replace.

Но я бы начал с вопроса, кто и зачем ввел описанные вами ограничения. Потому что если автоматизировать бордак, будет автоматизированный бордак. Качественное внедрение Ansible предполагает изменение структуры конфигов и полный отказ от ручного управления хостами. Я слышал легенду про красную лампочку, которая загорается в кабинете у главного сисадмина Яндекса, если кто-то руками вошёл на продакшен. По легенде, он лично отправляется знатно олюлить нарушителя.
Ответ написан
Комментировать
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Можно реализовать шаблонизацию на Jinja2 и не используя template - прямо внутри таски с set_fact, например. Это костыль, но условиям удовлетворяет.
Ответ написан
@kfs
системный администратор
Какое исходное и конечное значение должно быть? Не совсем понятно что нужно заменить?
В чем проблема использовать lineinfile и поиск по regexp?
- name: Replace syslog server
ansible.builtin.lineinfile:
path: /etc/nginx/nginx.conf
regexp: '^error_log\s+syslog:server=[^,]+,\s*facility=local6,tag=siemnginxerrlog\s+info;'
line: 'error_log syslog:server=192.168.1.100:514,facility=local6,tag=siemnginxerrlog info;'
backup: yes
Ответ написан
siferdj
@siferdj
Люблю учиться
awk '
   /server {/ { in_server = 1 }
   in_server && /ssl_certificate / { next }
   in_server && /ssl_certificate_key / { next }
   in_server && /error_log / { next }
   in_server && /access_log / { next }
   in_server && /}/ { 
       print "    ssl_certificate /etc/nginx/ssl/fullchain.pem;"
       print "    ssl_certificate_key /etc/nginx/ssl/privkey.pem;"
       print "    error_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxerrlog info;"
       print "    access_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxacclog,severity=info combined;"
       in_server = 0
   }
   { print }
   ' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.tmp
   mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
YCLIENTS Москва
от 350 000 до 400 000 ₽
Viletech Москва
от 70 000 до 120 000 ₽
Wanted. Санкт-Петербург
от 60 000 до 120 000 ₽