core.service
Управление сервисами OS: активность и автозапуск.
core.service управляет двумя независимыми осями сервиса: активностью (running / stopped / restarted) и автозапуском при загрузке (enabled). Backend определяется по init-системе хоста. running и enabled идемпотентны; restarted намеренно неидемпотентен — рестарт выполняется всегда. Требует root.
Требования
- Rootтребуется
- Сторона
soul-side - Коллекция
soulstack.services - Категория
services
run_as_rootexec_subprocessАвто из фактов хоста (os.init_system); при отсутствии — рантайм-детект: systemd → openrc → sysv. Не определён — шаг падает.
Состояния
core.service.running — Сервис активен. Опциональный enabled одним шагом управляет автозапуском.
Сервис был неактивен и запущен, либо enabled задан и autostart пришлось изменить.
Сервис уже активен и autostart в нужном состоянии.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя сервиса/юнита. |
enabled | bool | optional | true → дополнительно enable, false → disable, опущено → autostart не трогать. |
daemon_reload | stringauto | always | never | optional · auto | systemctl daemon-reload перед start (systemd): auto = при NeedDaemonReload, always = безусловно, never = opt-out. openrc/sysv — no-op (ADR-015). |
Пример — running + enabled одним шагом
- name: Ensure node_exporter is running and enabled at boot module: core.service.running params: name: node_exporter enabled: trueOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
active | true | |
enabled | bool (если задан) |
core.service.stopped — Сервис остановлен.
Был активен и остановлен.
Сервис уже остановлен.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя сервиса/юнита. |
Пример — Остановить сервис перед обслуживанием
- name: Stop nginx before maintenance module: core.service.stopped params: name: nginxOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
active | false |
core.service.restarted — Безусловный restart.
Всегда: рестарт запрошен явно, идемпотентности здесь нет намеренно.
Никогда — рестарт выполняется каждый прогон.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя сервиса/юнита. |
daemon_reload | stringauto | always | never | optional · auto | systemctl daemon-reload перед restart (systemd): auto = при NeedDaemonReload, always = безусловно, never = opt-out. openrc/sysv — no-op (ADR-015). |
Пример — restarted по onchanges с принудительным daemon-reload
- name: Restart redis after drop-in change (force daemon-reload) module: core.service.restarted onchanges: [redis_hardening_dropin] params: name: redis-server daemon_reload: alwaysOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
active | true |
core.service.enabled — Автозапуск при загрузке (отдельная ось от активности).
Autostart был выключен и включён.
Autostart уже включён.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя сервиса/юнита. |
daemon_reload | stringauto | always | never | optional · auto | systemctl daemon-reload перед enable (systemd): auto = при NeedDaemonReload, always = безусловно, never = opt-out. openrc/sysv — no-op (ADR-015). |
Пример — Включить автозапуск без немедленного старта
- name: Enable node_exporter at boot module: core.service.enabled params: name: node_exporterOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
enabled | true |
Справочник
Поддерживаемые init-системы
| Init | Как выбирается |
|---|---|
| systemd | из факта os.init_system, иначе рантайм-детект (первым) |
| openrc | то же (вторым) |
| sysv | то же (третьим) |
daemon_reload — перечитывание unit-файлов
systemd держит unit-определения в памяти. После правки unit-файла на диске (например, drop-in отрендерил core.file) systemctl restart тихо рестартует сервис со старым определением, пока не сделан daemon-reload. core.service делает его сам.
| Значение | Поведение (systemd) |
|---|---|
| auto (default) | Reload только при реальном рассинхроне: модуль проверяет NeedDaemonReload и перечитывает unit-файлы, лишь если он yes. |
| always | daemon-reload безусловно перед действием. |
| never | Явный opt-out — reload не делается. |
Заметки
- restarted намеренно неидемпотентен: changed=true всегда, рестарт запрошен явно.
- На non-systemd init (openrc / sysv) daemon_reload — no-op при любом значении; факт реального reload виден полем reloaded: true в output.
- Требует root.
Безопасность и умолчания
- stopped и restarted — реальный downtime: name должно приходить от автора Destiny, остановка не того юнита = отказ в обслуживании.
- enabled закрепляет исполнение юнита при каждой загрузке — контролируйте источник unit-файла как исполняемый артефакт.
- enabled ортогонален активности: enable не стартует сервис, disable не останавливает. Чтобы сервис гарантированно не работал — нужен stopped.