Puppet Bolt – это инструмент с открытым исходным кодом, который широко используется для автоматизации ручной работы.
Bolt основан на Ruby и его инструменте командной строки, который получает исполняемые скрипты, команды на локальном и удаленном сервере через SSH и WinRM.
Это помогает управлять несколькими серверами разными способами.
- Управлять обновлениями
- Установка программы
- Чтение журналов
- Остановка или запуск служб
- Выполнение команд
Хорошей новостью является то, что вам не нужно устанавливать какой-либо агент на серверы.
Этот инструмент работает без агента.
Предпосылки
Следующий пример относится к Ubuntu, поэтому вам нужна виртуальная машина Ubuntu с доступом sudo к root.
Обновление системы
Мы настоятельно рекомендуем вам обновить все доступные репозитории и пакеты перед установкой любого нового пакета в системе.
Выполните следующую команду, и она сделает всю работу за вас.
sudo apt-get update
Установка Puppet Bolt
Поскольку он не агентный, вам не нужно устанавливать его на каждый сервер.
Вместо этого, только на одном сервере, который будет выступать в качестве главного, который может использоваться для подключения к удаленным серверам.
Bolt – это мультиплатформенный инструмент, поэтому вы можете установить его на своей любимой ОС.
- Windows
- macOS
- RHEL
- CentOS
- Fedora
- Debian
- Ubuntu
Обратитесь к официальному сайту для последней доступной версии.
Давайте установим его на Ubuntu.
Выполните следующую команду, чтобы получить пакет.
sudo wget https://apt.puppet.com/puppet6-release-bionic.deb
Затем установите загруженный выше пакет с помощью команды диспетчера пакетов Debian.
sudo dpkg -i puppet6-release-bionic.deb
Снова обновите систему, используя следующую команду.
sudo apt-get update
Наконец, выполните следующую команду, чтобы установить Bolt.
sudo apt-get install puppet-bolt
Вы успешно установили puppet bolt на своем сервере.
Это необходимо сделать на всех серверах, которыми вы хотите управлять через Bolt.
Как упоминалось ранее, Bolt подключается к другому серверу через ключ SSH, поэтому я предполагаю, что вы уже обменялись ключами между серверами.
Если нет, вы можете обратиться к этому руководству для настройки обмена ключами SSH:
🔬 Как обменяться ключом SSH для аутентификации без пароля между серверами Linux
Давайте подключимся к удаленным серверам и выполним команды bolt.
Чтобы запустить команду на одном узле, используйте следующую команду.
bolt command run <COMMAND> --nodes <NODE>
Пожалуйста, замените COMMAND командой, которую вы хотите выполнить, а NODE – именем хоста или IP удаленного сервера.
Точно так же вы можете запустить команду на нескольких узлах.
bolt command run <COMMAND> -n <NODE1,NODE2,NODE3,NODE4>
Если вам нужно добавить аутентификацию по паролю в команду, вы можете добавить ее с помощью флагов.
bolt command run <COMMAND> -n <NODE1,NODE2> -u <USER> -p <PASSWORD>
Предположим, вы хотите посмотреть, как долго работает система, и вам нужно будет использовать команду `uptime`, например:
bolt command run uptime --nodes 35.185.68.71,35.231.9.135
Вы должны увидеть следующий вывод.
$ bolt command run uptime --nodes 35.185.68.71,35.231.9.135
Started on 35.185.68.71...
Started on 35.231.9.135...
Finished on 35.231.9.135:
STDOUT:
04:57:48 up 7 min, 0 users, load average: 0.00, 0.03, 0.02
Finished on 35.185.68.71:
STDOUT:
04:57:48 up 9 min, 0 users, load average: 0.00, 0.00, 0.00
Successful on 2 nodes: 35.185.68.71,35.231.9.135
Ran on 2 nodes in 5.96 seconds
Возможно, вы захотите запустить какую-нибудь команду, содержащую пробелы, поэтому вам нужно будет обернуть команду в одинарные кавычки:
$ bolt command run 'echo $HOME' --nodes 35.185.68.71,35.231.9.135
Started on 35.185.68.71...
Started on 35.231.9.135...
Finished on 35.231.9.135:
STDOUT:
/home/sajid
Finished on 35.185.68.71:
STDOUT:
/home/sajid
Successful on 2 nodes: 35.185.68.71,35.231.9.135
Ran on 2 nodes in 6.11 seconds
Запуск скриптов
У всех нас есть набор скриптов, которые мы используем регулярно.
Bolt позволяет легко использовать эти скрипты без каких-либо изменений и запускать их на еще большем количестве узлов одновременно.
Все, что вам нужно сделать, это указать имя и путь скрипта, который вы хотите запустить.
bolt script run <PATH/TO/SCRIPT> --nodes <NODE1,NODE2,NODE3,NODE4>
bolt script run /home/sajid/Desktop/samplescript.sh --nodes 35.185.68.71,35.231.9.135
Вы должны увидеть что-то похожее на это:
$ bolt script run /home/sajid/Desktop/samplescript.sh --nodes 35.185.68.71,35.231.9.135
Started on 35.185.68.71...
Started on 35.231.9.135...
Finished on 35.231.9.135:
STDOUT:
Hello World
Finished on 35.185.68.71:
STDOUT:
Hello World
Successful on 2 nodes: 35.185.68.71,35.231.9.135
Ran on 2 nodes in 15.18 seconds
Вы можете запускать скрипты на любом языке, если в удаленной системе установлен соответствующий интерпретатор.
Автоматизация с task
Task – это набор действий, которые вы хотите выполнить на удаленных машинах.
Taskи могут быть написаны на любом языке, который выполняется на удаленном узле.
Таски облегчают повторное использование и совместное использование скриптов и помогают достичь автоматизации.
Вы можете скачать некоторые существующие таски из Puppet Forge и загрузить свои туда, если вам это нужно.
Например, если вы хотите проверить состояние пакета vim, вы можете использовать следующую команду.
bolt task run package action=status name=vim --nodes 35.185.68.71,35.231.9.135
Вы увидите вывод, похожий на этот:
$ bolt task run package action=status name=vim --nodes 35.185.68.71,35.231.9.135
Started on 35.185.68.71...
Started on 35.231.9.135...
Finished on 35.185.68.71:
{
"status": "install ok installed",
"version": "2:7.4.1689-3ubuntu1.3"
}
Finished on 35.231.9.135:
{
"status": "install ok installed",
"version": "2:7.4.1689-3ubuntu1.3"
}
Successful on 2 nodes: 35.185.68.71,35.231.9.135
Ran on 2 nodes in 19.15 seconds
Если вы не нашли установленный пакет vim, вы можете установить его с помощью следующей команды.
bolt task run package action=install name=vim --nodes 35.185.68.71,35.231.9.135
Вы можете запустить plan, чтобы настроить nodejs и подключить его к вашему балансировщику нагрузки, вы можете сделать это, комбинируя Puppet Bolt с целевым узлом, в котором уже установлен Bolt.
bolt plan run nodejs::myplan load_balancer=lb.myorg.com
Вы можете использовать puppet bolt для копирования файлов на удаленные узлы.
Вы можете просто загрузить файл или каталог на удаленный узел, используя команду `bolt file upload`.
Все, что вам нужно сделать, это указать путь к файлу на локальном компьютере и пункт назначения на удаленном узле.
bolt file upload <SOURCE> <DESTINATION> --nodes <NODE1>
Вы можете загрузить файл на несколько удаленных узлов одновременно следующим образом:
bolt file upload sample_file.txt /tmp/remotesample_file.txt --nodes 35.185.68.71,35.231.9.135
Есть множество возможностей, как вы можете видеть.
Создание файла инвентаризации
Bolt позволяет вам создать файл, в котором будет храниться информация о ваших узлах, задачах и конфигурации.
Вы можете указать разные узлы в группе, и файл инвентаризации по умолчанию хранится в файле inventory.yaml в каталоге проекта.
Вот пример создания файла инвентаризации.
---
# Example Inventory file
groups:
- name: Group of nodes
nodes:
- node1
- node2
- node3
config:
ssh:
host-key-check: false
ssl: false
Вы можете заменить эти node1, node2, node3 на ваше фактическое имя домена узла или IP-адрес вашего узла.
Теперь вы можете добавить этот файл в команды bolt для выполнения задач на указанных узлах.
bolt command run <COMMAND> --inventoryfile ./inventory.yaml
Заключение
Я надеюсь, что к настоящему времени у вас есть представление о том, что такое Bolt и как он может помочь вам в автоматизации.
1 comment
По нему и по описаниям можно сделать вывод, что система в первый раз пакует все данные в архив, а в следующие разы находит изменившиеся файлы, и создает архив с дельтой. Не знаю, на кого рассчитан этот алгоритм, а мне он явно не подходит. Во-первых, у меня основной объем создают картинки, которые жать не надо. Данные, которые неплохо жмутся, занимают у меня не очень большой объем. Вообще сейчас даже офисные документы представляют собой zip архив. Во-вторых, совершенно не понятно, как администрировать этот набор зипников. Можно ли, например, удалить один из них, если срочно понадобится место? Можно ли оставить несколько определенных версий нужной мне папки, а остальное удалить? И наконец, самое неприятное – нет никакой уверенности, что эти данные можно будет без проблем восстановить в будущем. Алгоритм бэкапа поменялся при переходе от XP к 7-ке. Нет никакой уверенности, что какая-нибудь Виндовс 10 не забудет об этих бэкапах. А может я вообще пересяду на Мак или Линукс или какой-нибудь будущий Андроид для десктопов – кто знает. В общем, механизм, который меня устроит, должен давать результат в понятном виде, с использованием распространенных форматов, и чтобы его можно было развернуть без проприетарного софта. Еще одно потенциальное решение для сохранения данных – хранить все в сети. Но тут тоже есть нюансы. Во-первых, это дорого. Мне надо хранить до терабайта данных. Сколько же это стоит?