Нібито вступ ...
При запуску одного великого проекту зіткнувся з необхідністю проводити монотонні операції на великій кількості серверів. Банально - створити облікові записи всіх програмістів на всіх серверах. Інша справа - збирати дані одноразово, не вдаючись до налаштування будь-яких систем моніторингу.
Насправді, все придумано до нас - для цього існують системи управління конфігурацією. До них відносяться - Puppet, chef, CFEngine і Salt.
Дана утиліта проста в налаштуванні, установці і написана на моєму улюбленому Python.
Salt є клієнт-серверної системою, конфігурація описується в файлах конфігурації, зберігається на сервері і виконується на клієнтах, в залежності від параметрів запуску.
Як ви вже зрозуміли, Salt складається з двох складових:
- salt-master - це, власне, серверний додаток;
- salt-minion - клієнт (міньйон, як в мультику «Гидке я»).

Ось такі у нас працівники)
Показую на CentOS, так як наш проект базується на «капелюшних системах».
На сервер, який буде служити майстром, встановлюємо майстер і міньйон (ми ж хочемо вносити зміни і на сам сервер теж ?!) 🙂
На інші ставимо тільки міньйонів:
Готово! Тепер потрібно вказати Міньйон, хто їх майстер.
Чуть-чуть настройки ...
Для цього потрібно відредагувати файл конфігурації міньйон:

Так само ми можемо поміняти ім'я нашого міньйон, це дуже допоможе нам в майбутньому. Особисто я привласнюю їм імена в залежності від функціоналу. При цьому не забуваю перезапустити демона.
Попередньо змінивши конфігурацію міньйон, запускаємо і майстри, і міньйон на самому сервері майстра.
Для зв'язку між майстром і клієнтом необхідно відкрити порти 4505 і 4506.

Назви мене, по імені ...
Підключаємо і балуемся
Для роботи залишилося тільки підключити міньйонів до майстра, а-ля - «зареєструвати».
Дивимося, хто хоче з нами працювати, для цього використовуємо утиліту salt-key:
Бачимо двох бажаючих: власне, міньйон на майстра, і міньйон на вебсервере1.
Залишилося додати їх. Можна додавати по одному (параметр -a <имя миньона> ), А можна все відразу (параметр -A):
Готово! Зараз ми можемо управляти цими двома серверами.
Що ми тепер можемо? Давайте виконаємо якусь команду на обох серверах.
Наприклад, скільки часу, містер міньйон?
Синтаксис дуже простий - salt <имя миньона(ов)> команда параметр.
Якщо ми хочемо виконати на всіх серверах - вказуємо просто «зірочку», інакше ім'я, або регулярний вираз (наприклад, якщо є два міньйон з іменами web-1 і web-2, то можна вказати так - «web *»)
Далі вказується команда, в даному випадку - cmd.run. яка дозволяє виконати команди віддалено.
Ну і сам параметр команди.
Нижче буде висновок виконання команди на сервері.
Просто, чи не так?

Не життя, а казка =)