Fabric - автоматизация выполнения команд Linux и развертывания по SSH

В постоянно меняющемся мире разработки программного обеспечения эффективное управление удаленными серверами имеет решающее значение. Будь то системный администратор, инженер-программист или разработчик программного обеспечения, возможность запуска команд Linux на удаленных серверах – это обычная задача.

Тогда Fabric, высокоуровневая Python библиотека, предназначенная для удаленного выполнения команд Linux по SSH становится незаменимым инструментом для всех, кому необходимо управлять удаленными системами, используя возможности Python.

Что такое Fabric?

Fabric – это универсальная библиотека Python, которая упрощает процесс выполнения команд shell на удаленных серверах через SSH-соединения. Изначально она была разработана Джеффом Форсье (Jeff Forcier), а затем стала проектом с открытым исходным кодом.

Она предоставляет высокоуровневый Python-интерфейс для работы с удаленными системами, позволяя автоматизировать задачи, развертывать код и управлять конфигурациями на нескольких серверах без особых усилий.

Почему стоит использовать Fabric?

Есть несколько веских причин выбрать Fabric для выполнения удаленных команд:

  • Python подход – Fabric придерживается философии Python что позволяет разработчикам и системным администраторам легко писать сценарии на уже знакомом им языке.
  • SSH и Paramiko – Fabric использует библиотеку Paramiko для работы с SSH-соединениями, что обеспечивает безопасный и надежный способ удаленного выполнения команд.
  • Task-Based Workflow – Fabric поощряет подход к удаленному выполнению команд, ориентированный на задачи. Вы определяете задачи, которые по сути являются функциями Python, а Fabric заботится об их выполнении на удаленных серверах.
  • Случаи использования – Fabric является универсальным инструментом, подходящим для широкого спектра задач, включая развертывание приложений, управление конфигурацией сервера и выполнение задач по обслуживанию системы.

Как установить средство автоматизации Fabric в Linux

Важной особенностью fabric является то, что на удаленных машинах, которые необходимо администрировать, должен быть установлен только стандартный сервер OpenSSH.

Для начала работы необходимо установить определенные требования на сервере, с которого вы администрируете удаленные серверы.

  • Fabric* легко устанавливается с помощью менеджера пакетов pip, но вы также можете выбрать стандартный менеджер пакетов yum, dnf или apt/apt-get для установки пакета fabric, который обычно называется fabric или python-fabric.

Установка Fabric в системах RHEL

В дистрибутивах на базе RHEL, таких как CentOS Stream, Rocky Linux и AlmaLinux для установки пакета fabric необходимо установить и включить в системе репозиторий EPEL.

sudo dnf install epel-release
sudo dnf install fabric

Установка Fabric в системах Debian

В дистрибутивах на базе Debian, таких как Ubuntu и Linux Mint пользователи могут просто выполнить команду apt для установки пакета fabric, как показано на рисунке:

sudo apt install fabric

Установка Fabric с помощью PiP

Если пакет Fabric недоступен в репозиториях вашей системы, для его установки можно воспользоваться программой pip, как показано на рисунке.

sudo yum install python3-pip       [On RedHat based systems] 
sudo dnf install python3-pip       [On Fedora 22+ versions]
sudo apt install python3-pip       [On Debian based systems]

После успешной установки pip можно воспользоваться программой pip для получения последней версии пакета fabric, как показано на рисунке:

pip3 install fabric

Как использовать Fabric для автоматизации задач администрирования Linux

Начнем с того, как использовать Fabric. В процессе установки в каталог PATH вашей системы был добавлен скрипт Python под названием fab. Сценарий fab выполняет все задачи при использовании Fabric.

Запуск команд Linux локально

По традиции, для начала необходимо создать Python-файл под названием fabfile.py с помощью вашего любимого текстового редактора. Помните, что вы можете дать этому файлу другое имя по своему усмотрению, но путь к файлу должен быть указан следующим образом:

fab --fabfile /path/to/the/file.py

Fabric использует fabfile.py для запуска задач, fabfile должен находиться в том же каталоге, где выполняется инструмент Fabric.

Пример 1: Сначала создадим базовый Hello World.

vi fabfile.py

Добавим в файл следующие строки кода.

def hello():
       print('Hello world, Tecmint community')

Сохраним файл и выполним команду ниже.

Теперь рассмотрим пример файла fabfile.py для выполнения команды uptime на локальной машине.

Пример 2: Откройте новый файл fabfile.py следующим образом:

vi fabfile.py

Вставьте в него следующие строки кода.

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

Затем сохраните файл и выполните следующую команду:

fab uptime

Удаленный запуск команд Linux по SSH

В Fabric API используется словарь конфигурации, который в Python является эквивалентом ассоциативного массива, известного как env, в котором хранятся значения, управляющие действиями Fabric.

Список env.hosts – это список серверов, на которых вы хотите запускать Fabric*задачи. Если ваша сеть имеет адресацию *192.168.0.0 и вы хотите управлять хостами 192.168.0.2 и 192.168.0.6 с помощью вашего fabfile, вы можете настроить env.hosts следующим образом:

#!/usr/bin/env python
from  fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]

Приведенная выше строка кода только указывает хосты, на которых будут выполняться задачи Fabric, но не делает ничего больше. Поэтому вы можете определить некоторые задачи, Fabric предоставляет набор функций, которые вы можете использовать для взаимодействия с удаленными машинами.

Хотя существует множество функций, наиболее часто используемыми являются:

  • run – выполнение команды shell на удаленной машине.
  • local – выполнение команды на локальной машине.
  • sudo – выполнение команды shell на удаленной машине с правами root.
  • get – загрузка одного или нескольких файлов с удаленной машины.
  • put – загрузка одного или нескольких файлов на удаленную машину.

Пример 3: Для отправки сообщения на несколько машин создайте fabfile.py, как показано ниже.

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
      run("echo -n 'Hello, you are tuned to Tecmint ' ")

Для выполнения заданий выполните следующую команду:

fab echo

Пример 4: Вы можете усовершенствовать созданную ранее команду fabfile.py для выполнения команды uptime на локальной машине, чтобы она выполняла команду uptime, а также проверяла использование диска с помощью команды df на нескольких машинах следующим образом:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
      run('uptime')
def disk_space():
     run('df -h')

Сохраните файл и выполните следующую команду:

fab uptime
fab disk_space

Автоматическая установка стека LAMP на удаленный Linux-сервер

Пример 4: Рассмотрим пример развертывания сервера *LAMP*(Linux, Apache, MySQL/MariaDB и PHP) на удаленном Linux-сервере.

Мы напишем функцию, которая позволит установить LAMP удаленно с правами root.

Для RHEL/CentOS и Fedora

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  run ("yum install -y httpd mariadb-server php php-mysql")

Для Debian/Ubuntu и Linux Mint

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")

Сохраните файл и выполните следующую команду:

fab deploy_lamp

Примечание: Из-за большого объема выходных данных мы не можем создать скринкаст (анимированный gif) для этого примера.

Теперь вы можете автоматизировать задачи управления Linux-сервером с помощью Fabric и его возможностей и примеров, приведенных выше…

Полезные опции Fabric

  • Вы можете выполнить команду fab --help для просмотра полезной информации и длинного списка доступных опций командной строки.
  • Важная опция --fabfile=PATH, которая поможет вам указать другой файл модуля Python для импорта, отличный от fabfile.py .
  • Чтобы указать имя пользователя для подключения к удаленным хостам, используйте опцию --user=USER.
  • Для использования пароля для аутентификации и/или*sudo* используйте опцию --password=PASSWORD.
  • Для вывода подробной информации о команде NAME используйте опцию --display=NAME.
  • Для просмотра форматов используйте опцию --list, варианты: короткий, обычный, вложенный, используйте опцию --list-format=FORMAT.
  • Для вывода списка возможных команд и выхода включите опцию --list.
  • Для вывода цветного сообщения об ошибке используйте опцию --colorize-errors .
  • Для просмотра номера версии программы и выхода используйте опцию --version.

Заключение

Fabric – это мощная библиотека Python, которая оптимизирует удаленное выполнение команд через SSH, обеспечивая удобный Pythonic-подход. Способность упрощать сложные задачи и автоматизировать управление системой делает ее ценным инструментом для системных администраторов, разработчиков и специалистов DevOps.

Управляете ли вы одним сервером или организуете масштабное развертывание, Fabric поможет вам выполнить работу эффективно и результативно.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)