core.pkg
Управление пакетами OS через штатный пакетный менеджер.
core.pkg приводит OS-пакеты к нужному состоянию через native package manager хоста. Backend выбирается автоматически по фактам хоста, состояния идемпотентны: если пакет уже в нужной версии, шаг ничего не делает и сообщает changed=false. Установка и удаление идут правами процесса soul-агента и требуют root.
Требования
- Rootтребуется
- Сторона
soul-side - Коллекция
soulstack.system - Категория
system
run_as_rootexec_subprocessАвто из фактов хоста (os.pkg_mgr); при отсутствии — рантайм-детект: apt (Debian/Ubuntu), dnf (RHEL ≥ 8), yum (RHEL ≤ 7), apk (Alpine). Не определён — шаг падает.
Состояния
core.pkg.installed — Пакет установлен (опционально точная версия).
Пакета не было или установленная версия ≠ запрошенной.
Нужная версия уже стоит.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя пакета. |
version | string | optional | Точная версия пакета (если опущено — любая). |
Пример — Установка redis-server с фиксированной версией и retry
- name: Install redis-server module: core.pkg.installed retry: { count: 3, delay: 10s } params: name: redis-server version: "7.0.15"Output
| Поле | Тип | Описание |
|---|---|---|
name | string | |
installed | true | |
version | string |
core.pkg.latest — Пакет подтянут до новейшей версии репозитория.
Пакета не было либо версия после операции изменилась.
Пакет уже последней доступной версии.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя пакета. |
Пример — Держать curl на новейшей доступной версии
- name: Keep curl at the latest available version module: core.pkg.latest params: name: curlOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
installed | true | |
version | string |
core.pkg.absent — Пакет удалён.
Пакет был и удалён.
Пакета нет.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя пакета. |
Пример — Удалить ненужный пакет
- name: Remove telnet module: core.pkg.absent params: name: telnetOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
installed | false |
Справочник
Поддерживаемые backend'ы
| Менеджер | Дистрибутивы | Как выбирается |
|---|---|---|
| apt | Debian, Ubuntu | из факта os.pkg_mgr, иначе рантайм-детект |
| dnf | RHEL ≥ 8, Fedora | то же |
| yum | RHEL ≤ 7 | то же |
| apk | Alpine | то же |
Заметки
- На apt/apk перед installed/latest один раз за жизнь процесса обновляется индекс репозиториев — важно для свежих VM и контейнеров. dnf/yum подтягивают metadata сами.
- Требует root: install и remove идут через пакетный менеджер.
Безопасность и умолчания
- Подпись пакетов проверяет пакетный менеджер, а не модуль: источник доверия — репозиторные ключи apt/dnf/yum/apk на хосте.
- Модуль не добавляет ключи репозиториев и не выставляет --allow-unauthenticated / --nogpgcheck.
- name и version должны приходить от автора Destiny, а не из недоверенного ввода: установка исполняет maintainer-скрипты пакета (postinst и т.п.) правами soul-агента.