Как внести изменения в конфигурацию Nginx с помощью Ansible?

Как можно отредактировать файл, не прибегая к использованию шаблонов (template), чтобы внести следующие изменения в блок server { }? Исходные параметры:

<pre><code>ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;

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

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

При этом необходимо учесть два основных аспекта:

1. Нельзя использовать шаблоны (это бы упростило задачу).
2. Существует пересечение значений.
  • 14 марта 2025 г. 14:24
Ответы на вопрос 3
Чтобы внести изменения в конфигурацию Nginx с помощью Ansible без использования шаблонов, можно воспользоваться модулем `lineinfile` или `blockinfile`. Данный подход позволяет редактировать файл непосредственно, добавляя или заменяя строки. Мы рассмотрим пример использования `lineinfile` для редактирования элементов в блоке `server`.

Допустим, ваш файл конфигурации Nginx находится по пути `/etc/nginx/conf.d/default.conf`. Ниже приведен пример плейбука Ansible, который внесет необходимые изменения:

```yaml
---
- name: Update Nginx configuration
  hosts: nginx_servers
  become: yes
  tasks:
    - name: Ensure ssl_certificate is set correctly
      lineinfile:
        path: /etc/nginx/conf.d/default.conf
        regexp: '^ssl_certificate '
        line: 'ssl_certificate /etc/nginx/ssl/fullchain.pem;'
        state: present

    - name: Ensure ssl_certificate_key is set correctly
      lineinfile:
        path: /etc/nginx/conf.d/default.conf
        regexp: '^ssl_certificate_key '
        line: 'ssl_certificate_key /etc/nginx/ssl/privkey.pem;'
        state: present

    - name: Update error_log for SIEM
      lineinfile:
        path: /etc/nginx/conf.d/default.conf
        regexp: '^error_log '
        line: 'error_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxerrlog info;'
        state: present

    - name: Update access_log for SIEM
      lineinfile:
        path: /etc/nginx/conf.d/default.conf
        regexp: '^access_log '
        line: 'access_log syslog:server=<Адрес сервера SIEM>:<Порт сервера SIEM>,facility=local6,tag=siemnginxacclog,severity=info combined;'
        state: present

    - name: Reload Nginx to apply changes
      service:
        name: nginx
        state: reloaded
```

### Объяснение кода:
1. **Модуль `lineinfile`:** Этот модуль будет редактировать файл по указанному пути. Он ищет строки, соответствующие регулярному выражению (`regexp`), и заменяет их. Если такой строки нет, он добавит новую.
  
2. **Регулярные выражения (`regexp`):** Они позволят находить и заменять строки по шаблону, что важно для корректного редактирования конфигурации.

3. **Перезапуск Nginx:** После всех изменений необходимо перезагрузить Nginx, чтобы новые настройки вступили в силу. Для этого используется модуль `service`.

Таким образом, используя `lineinfile`, вы сможете внести корректировки в конфигурацию Nginx без применения шаблонов.
может, вынести строки в отдельный файл, инклюдить его в конфиг NGINX, ansible'ом изменять тот отдельный файл.
Можно реализовать шаблонизацию на Jinja2 и не используя template - прямо внутри таски с set_fact, например. Это костыль, но условиям удовлетворяет.
Похожие вопросы