feat: добавлен шаблон для systemd сервиса

- Создан шаблон runner/templates/sensusagent.service.j2 для гибкой настройки systemd сервиса
- Обновлен runner/deploy-service/playbook.yml для использования шаблона вместо хардкода
- Добавлены переменные для настройки systemd сервиса в group_vars/all.yml:
  - service_user, service_group, service_restart_sec, agent_mode
- Добавлена возможность переопределения agent_mode для группы proxvms (stdout вместо kafka)
- Обновлена документация docs/ansible_groups.md:
  - Добавлен раздел о настройках systemd сервиса
  - Добавлен раздел о шаблоне systemd сервиса
  - Обновлена структура проекта

Теперь systemd сервис настраивается через Jinja2 шаблоны с возможностью
переопределения параметров для разных групп хостов.

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Sergey Antropoff 2025-09-15 15:40:32 +03:00
parent d1da51d875
commit 89512f66bc
5 changed files with 80 additions and 19 deletions

View File

@ -17,7 +17,8 @@ runner/
│ ├── proxvms.yml # Настройки для VM/контейнеров │ ├── proxvms.yml # Настройки для VM/контейнеров
│ └── standalone.yml # Настройки для автономных серверов │ └── standalone.yml # Настройки для автономных серверов
├── templates/ ├── templates/
│ └── config.yaml.j2 # Шаблон конфигурации │ ├── config.yaml.j2 # Шаблон конфигурации
│ └── sensusagent.service.j2 # Шаблон systemd сервиса
└── inventory.ini # Группы хостов └── inventory.ini # Группы хостов
``` ```
@ -56,6 +57,25 @@ server1 ansible_host=1.2.3.4 ansible_user=root
## Конфигурация групп ## Конфигурация групп
### Настройки systemd сервиса
В файле `group_vars/all.yml` можно настроить глобальные параметры systemd сервиса:
```yaml
# Настройки systemd сервиса
service_user: root
service_group: root
service_restart_sec: 3
agent_mode: kafka
```
Для разных групп можно переопределить эти настройки:
```yaml
# group_vars/proxvms.yml
agent_mode: stdout # VM/контейнеры могут использовать stdout вместо kafka
```
### Файл `group_vars/proxmox.yml` ### Файл `group_vars/proxmox.yml`
```yaml ```yaml
@ -126,7 +146,9 @@ collectors_config:
timeout: "5s" timeout: "5s"
``` ```
## Шаблон конфигурации ## Шаблоны
### Шаблон конфигурации
Файл `templates/config.yaml.j2` автоматически генерирует `config.yaml` на основе переменных групп: Файл `templates/config.yaml.j2` автоматически генерирует `config.yaml` на основе переменных групп:
@ -153,6 +175,28 @@ collectors:
{% endfor %} {% endfor %}
``` ```
### Шаблон systemd сервиса
Файл `templates/sensusagent.service.j2` автоматически генерирует systemd unit на основе переменных групп:
```ini
[Unit]
Description=SensusAgent metrics collector
After=network.target
[Service]
Type=simple
Environment=CONFIG_PATH={{ remote_dir }}/config.yaml
ExecStart={{ remote_dir }}/agent --mode {{ agent_mode | default('kafka') }}
Restart=on-failure
RestartSec={{ service_restart_sec | default(3) }}
User={{ service_user | default('root') }}
Group={{ service_group | default('root') }}
[Install]
WantedBy=multi-user.target
```
## Использование ## Использование
### 1. Добавление нового хоста ### 1. Добавление нового хоста

View File

@ -61,25 +61,17 @@
fi fi
ignore_errors: yes ignore_errors: yes
- name: Generate systemd unit from template
ansible.builtin.template:
src: ../templates/sensusagent.service.j2
dest: "{{ tmp_dir }}/sensusagent.service"
mode: '0644'
delegate_to: localhost
run_once: true
- name: Install/refresh systemd unit - name: Install/refresh systemd unit
ansible.builtin.raw: | ansible.builtin.raw: |
cat >/etc/systemd/system/sensusagent.service <<'UNIT' cp {{ tmp_dir }}/sensusagent.service /etc/systemd/system/sensusagent.service
[Unit]
Description=SensusAgent metrics collector
After=network.target
[Service]
Type=simple
Environment=CONFIG_PATH={{ remote_dir }}/config.yaml
ExecStart={{ remote_dir }}/agent --mode kafka
Restart=on-failure
RestartSec=3
User=root
Group=root
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload systemctl daemon-reload
- name: Enable and start service - name: Enable and start service

View File

@ -11,3 +11,9 @@ collectors_base_config:
uptime: uptime:
interval: "60s" interval: "60s"
timeout: "5s" timeout: "5s"
# Настройки systemd сервиса
service_user: root
service_group: root
service_restart_sec: 3
agent_mode: kafka

View File

@ -15,3 +15,7 @@ collectors_config:
uptime: uptime:
interval: "60s" interval: "60s"
timeout: "5s" timeout: "5s"
# Настройки systemd сервиса для VM/контейнеров
# Можно переопределить глобальные настройки
agent_mode: kafka # VM/контейнеры могут использовать stdout вместо kafka

View File

@ -0,0 +1,15 @@
[Unit]
Description=SensusAgent metrics collector
After=network.target
[Service]
Type=simple
Environment=CONFIG_PATH={{ remote_dir }}/config.yaml
ExecStart={{ remote_dir }}/agent --mode {{ agent_mode | default('kafka') }}
Restart=on-failure
RestartSec={{ service_restart_sec | default(3) }}
User={{ service_user | default('root') }}
Group={{ service_group | default('root') }}
[Install]
WantedBy=multi-user.target