Модули pkg, service, file
Тема дорожной карты · SaltStack
Модули pkg, service и file решают основные задачи конфигурационного управления: установка пакетов, управление сервисами и редактирование файлов. Эти модули стоит освоить после test.ping. Они существуют в двух ипостасях: как execution-модули для ad-hoc-команд и как одноимённые state-модули для декларативных SLS-файлов. Связка «пакет установлен → конфиг разложен → сервис запущен и перезапускается при изменении конфига» — это базовый паттерн для создания Salt-формул.
Как это работает
pkg — виртуальный модуль, который на Ubuntu использует APT, а на RHEL-подобных системах — YUM/DNF. Например, salt -G 'os:Ubuntu' pkg.install nginx и аналогичная команда для CentOS различаются только таргетом. Основные функции pkg включают 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 (автозапуск). Execution-модуль file позволяет выполнять операции над файлами на миньоне, такие как file.stats (владелец, права, размер), file.replace (правка по регулярному выражению), file.append, file.touch и file.chown. State-функция file.managed размещает файлы с мастера по шаблону, рендерит их как Jinja-шаблоны и размещает исходники по salt://-пути.
Когда применять
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, что гарантирует дрейф.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- imperative /ɪmˈpɛrətɪv/ «импЕрэтив», повелительное наклонение разбор: Commit messages: Conventional Commits, повелительное наклонение
- incident /ˈɪnsɪdənt/ ударение на первый слог разбор: Митинги и инциденты
- repository /rɪˈpɒzɪtəri/ ударение на «по», четыре слога, а не «репозитОри» разбор: Где встречается: код, доки, тикеты, созвоны
- command /kəˈmɑːnd/ ударение на второй слог разбор: Английский Linux и терминала
- should /ʃʊd/ l немая разбор: Язык RFC: MUST, SHOULD, MAY (RFC 2119)