diff --git a/README.md b/README.md index 885c165..bd28dde 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ - [Master на Debian 12](#master-на-debian-12) - [Minion на CentOS Stream 9](#minion-на-centos-stream-9) - [Minion на Debian 12](#minion-на-debian-12) + - [Автодополнение команд](#автодополнение-команд) - [Настройка master](#настройка-master) - [Настройка minion](#настройка-minion) - [Ключи](#ключи) @@ -34,6 +35,9 @@ - [Модули исполнения](#модули-исполнения) - [Несколько полезных функций](#несколько-полезных-функций) - [Формулы](#формулы) + - [Модули состояний](#модули-состояний) + - [Нельзя использовать в одном состоянии один модуль несколько раз!](#нельзя-использовать-в-одном-состоянии-один-модуль-несколько-раз) + - [Порядок исполнения](#порядок-исполнения) - [Источники](#источники) *** @@ -120,6 +124,33 @@ systemctl enable --now salt-minion [вверх](#краткое-руководство-по-salt-stack) +## Автодополнение команд + +В Альт автодополнение работает из коробки, а вот в Debian его необходимо дополнительно настраивать. + +В первую очередь необходимо убедиться в том, что установлен пакет `bash-completion` + +```bash +root@deb-master:~# apt-cache policy bash-completion +bash-completion: + Установлен: 1:2.11-6 + Кандидат: 1:2.11-6 + Таблица версий: + *** 1:2.11-6 500 + 500 http://deb.debian.org/debian bookworm/main amd64 Packages + 100 /var/lib/dpkg/status +``` + +если не установлен - установить. Это добавит автодополнение для встроенных команд bash, для того, чтобы заработало автодополнение в salt, дополнительно необходимо добавить профиль автодополнения + +```bash +wget https://raw.githubusercontent.com/saltstack/salt/develop/pkg/salt.bash +cp salt.bash /etc/bash_completion.d/ +source /etc/bash_completion.d/salt.bash +``` + +Теперь по двойному Tab в командах salt на мастере должны отображаться возможные варианты дополнения команд. + ## Настройка master Описание возможных директив конфигурационного файла приводится в файле `/etc/salt/master` или в документации @@ -524,6 +555,134 @@ common_pkgs_installed: [вверх](#краткое-руководство-по-salt-stack) +## Модули состояний + +Модули состояний похожи на модули исполнения с той разницей, что модули исполнения используются для текущего выполнения в командной строке, а модули состояний описываются в формулах, которые должны применяться на миньонах. Чаще функционал модулей исполнения и модулей состояний идентичен, но в некоторых модулях могут быть отличия. + +```yml +--- + +# Пример системного состояния для RPM-дистрибутивов. +# Обновляет ядро Linux и корректирует конфигурацию загрузчика. + +kernel updated: + pkg.uptodate: + - pkgs: + - kernel + - refresh: true + file.comment: + - name: '/etc/default/grub' + - regex: '^GRUB_DEFAULT|^GRUB_DISABLE_SUBMENU' + cmd.run: + - name: 'grub2-mkconfig -o /boot/grub2/grub.cfg' + module.run: + - name: system.reboot +``` + +В примере указаны модули состояний `pkg`, `file`, `cmd` каждый вызывается с конкретной функцией - `pkg.uptodate`, `file.comment`, `cmd.run` + +Модуль `module.run` - позволяет в файле описания состояний вызвать модуль исполнения. Так в примере с помощью этого модуля вызван модуль исполнения `system.reboot` + +### Нельзя использовать в одном состоянии один модуль несколько раз! + +Например такое состояние завершится ошибкой потому что модуль `pkg` используется дважды + +```yml +--- + +common_pkgs_installed: + pkg.installed: + - pkgs: + - git + - mc + - refresh: true + pkg.latest: + - name: mc +``` + +```bash +deb-master: + Data failed to compile: +---------- + ID 'common_pkgs_installed' in SLS 'highstate.common_pkgs_installed' contains multiple state declarations of the same type +``` + +## Порядок исполнения + +- по порядку описания + +```yml +--- + +state1: + test.succeed_with_changes + +state2: + test.succeed_with_changes + +state3: + test.succeed_with_changes + +state4: + test.succeed_with_changes +``` + +- по флагу `ordered` + +```yml +--- + +state1: + test.succeed_with_changes: + - order: 3 + +state2: + test.succeed_with_changes: + - order: 2 + +state3: + test.succeed_with_changes: + - order: 1 + +state4: + test.succeed_with_changes: + - order: 4 +``` + +Выполнится в порядке order - `order: 1`, `order: 2`, `order: 3`, `order: 4` + +- по реквизитам + +```yml +--- + +state1: + test.succeed_with_changes: [] + +state2: + test.succeed_with_changes: + - require: + - state1 + +state3: + test.succeed_with_changes: + - onchanges: # А так же watch, listen + - state1 + - test: state2 + +state4: + test.succeed_with_changes: + - prereq: + - state1 + +unhappy_state: + test.succeed_with_changes: + - onfail: + - state* +``` + + + ## Источники