Модули pkg, service, file
Тема дорожной карты · SaltStack
pkg, service и file — три модуля, которыми решается львиная доля повседневных задач конфигурационного управления: поставить пакет, запустить сервис, поправить файл. Это первое, что стоит освоить после test.ping. Все три существуют в двух ипостасях: как execution-модули для ad-hoc-команд (salt 'web*' service.restart nginx) и как одноимённые state-модули для декларативных SLS-файлов (pkg.installed, service.running, file.managed). Связка «пакет установлен → конфиг разложен → сервис запущен и перезапускается при изменении конфига» — это базовый паттерн, из которого собирается почти любая Salt-формула.
Как это работает
pkg — виртуальный модуль: на Ubuntu имя pkg загрузчик привязывает к реализации для APT, на RHEL-подобных — для YUM/DNF, поэтому salt -G 'os:Ubuntu' pkg.install nginx и та же команда для CentOS выглядят одинаково, различаясь только таргетом. Основные функции — pkg.install, pkg.remove, pkg.upgrade, pkg.list_pkgs, pkg.version, pkg.refresh_db (аналог apt update). service так же прозрачно работает поверх systemd или другой init-системы: service.start, service.stop, service.restart, service.status, service.enable (автозапуск), service.get_all. Execution-модуль file — это операции над файлами на миньоне: file.stats (владелец, права, размер), file.replace (правка по регулярному выражению), file.append, file.touch, file.chown. Раскладывание файлов с мастера по шаблону — задача state-функции file.managed, которая берёт исходник по salt://-пути с файлового сервера мастера и умеет рендерить его как Jinja-шаблон.
Когда применять
Ad-hoc-вызовы уместны для разовых операций и инцидентов: salt '*' pkg.version openssl — быстрый аудит версии по парку, salt 'web*' service.restart nginx — перезапуск после ручной правки, salt 'db*' file.stats /etc/my.cnf — проверка прав. Как только действие становится частью желаемого постоянного состояния машины, переносите его в SLS: pkg.installed вместо pkg.install, service.running с enable: True вместо ручного рестарта, file.managed вместо scp-копирования. Декларативная форма даёт идемпотентность, отчёт «что изменилось» и dry-run через test=True. Виртуальность pkg и service делает эти модули опорой кроссплатформенных формул: различия дистрибутивов сводятся к именам пакетов, а не к логике.
Типичные ошибки
Главная путаница — императив против декларатива: pkg.install в SLS-файле вместо pkg.installed — частая ошибка новичка, и наоборот, попытка вызвать salt '*' pkg.installed из CLI. Вторая — pkg.upgrade на всём парке одновременно без batch-режима: шторм на зеркала репозиториев и, при неудачном обновлении, массовый инцидент вместо локального. Третья — забывать, что имена пакетов различаются между дистрибутивами: httpd в RHEL-мире и apache2 в Debian-мире; виртуальный модуль скрывает менеджер пакетов, но не имена. Четвёртая — редактировать конфиги через file.replace там, где файл целиком должен управляться file.managed: смешение ручных и управляемых правок гарантирует дрейф.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…