⏏️ Как установить Puppet Bolt для автоматизации задач сисадмина?

by itisgood

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 и как он может помочь вам в автоматизации.

 

You may also like

1 comment

Олег 29.07.2019 - 15:37

По нему и по описаниям можно сделать вывод, что система в первый раз пакует все данные в архив, а в следующие разы находит изменившиеся файлы, и создает архив с дельтой. Не знаю, на кого рассчитан этот алгоритм, а мне он явно не подходит. Во-первых, у меня основной объем создают картинки, которые жать не надо. Данные, которые неплохо жмутся, занимают у меня не очень большой объем. Вообще сейчас даже офисные документы представляют собой zip архив. Во-вторых, совершенно не понятно, как администрировать этот набор зипников. Можно ли, например, удалить один из них, если срочно понадобится место? Можно ли оставить несколько определенных версий нужной мне папки, а остальное удалить? И наконец, самое неприятное – нет никакой уверенности, что эти данные можно будет без проблем восстановить в будущем. Алгоритм бэкапа поменялся при переходе от XP к 7-ке. Нет никакой уверенности, что какая-нибудь Виндовс 10 не забудет об этих бэкапах. А может я вообще пересяду на Мак или Линукс или какой-нибудь будущий Андроид для десктопов – кто знает. В общем, механизм, который меня устроит, должен давать результат в понятном виде, с использованием распространенных форматов, и чтобы его можно было развернуть без проприетарного софта. Еще одно потенциальное решение для сохранения данных – хранить все в сети. Но тут тоже есть нюансы. Во-первых, это дорого. Мне надо хранить до терабайта данных. Сколько же это стоит?

Reply

Leave a Comment