Fabric — это библиотека Python и инструмент командной строки для оптимизации использования SSH для развертывания приложений или задач системного администрирования. Fabric очень прост и мощен и может помочь автоматизировать повторяющиеся задачи командной строки. Такой подход может сэкономить время за счет автоматизации всего вашего рабочего процесса.
В этом руководстве будет рассказано, как использовать Fabric для интеграции с SSH и автоматизации задач.
Установка
Ткань лучше всего устанавливать через пипс:
1
|
$ pip install fabric
|
Начало работы с тканью
использование
Ниже приведена простая функция, демонстрирующая, как использовать Fabric.
1
2
|
def welcome():
print(«Welcome to getting started with Fabric!»)
|
Программа выше сохранена как fabfile.py
в вашем текущем рабочем каталоге. Функция приветствия может быть выполнена с помощью fab
инструмента следующим образом:
1
2
|
$ fab welcome
Welcome to getting started with Fabric
|
Fabric предоставляет команду fab, которая считывает свою конфигурацию из файла fabfile.py
. Файл должен находиться в каталоге, из которого выполняется команда. Стандартный fabfile содержит функции, которые должны быть выполнены на удаленном хосте или группе удаленных хостов.
Характеристики
Fabric реализует функции, которые можно использовать для связи с удаленными хостами:
fabric.operations.run ()
Эта операция используется для запуска команды оболочки на удаленном хосте.
Примеры
1
2
3
|
run(«ls /var/www/»)
run(«ls /home/userx», shell=False)
output = run(‘ls /var/www/mysites’
|
fabric.operations.get ()
Эта функция используется для загрузки файлов с удаленного хоста. В приведенном ниже примере показано, как загрузить резервную копию с удаленного сервера.
1
2
|
# Downloading a back-up
get(«/backup/db.bak», «./db.bak»)
|
fabric.operations.put ()
Эта функция загружает файл (ы) на удаленный хост. Например:
1
2
|
with cd(‘/tmp’):
put(‘/path/to/local/test.txt’, ‘files’)
|
fabric.operations.reboot ()
Как следует из названия, эта функция перезагружает системный сервер.
1
2
|
# Reboot the remote system
reboot()
|
fabric.operations.sudo ()
Эта функция используется для выполнения команд на удаленном хосте с привилегиями суперпользователя. Кроме того, вы также можете передать дополнительный пользовательский аргумент, который позволяет запускать команды от имени другого пользователя, кроме root.
пример
1
2
|
# Create a directory
sudo(«mkdir /var/www»)
|
fabric.operations.local ()
Эта функция используется для запуска команды в локальной системе. Примером является:
1
2
3
4
5
|
# Extract the contents of a tar archive
local(«tar xzvf /tmp/trunk/app.tar.gz»)
# Remove a file
local(«rm /tmp/trunk/app.tar.gz»)
|
fabric.operations.prompt ()
Функция предлагает пользователю текст и возвращает ввод.
Примеры
1
2
3
4
5
|
# Simplest form:
environment = prompt(‘Please specify target environment: ‘)
# specify host
env_host = prompt(‘Please specify host:’)
|
fabric.operations.require ()
Эта функция используется для проверки заданных ключей в командной строке dict. Если не найдено, операция прекращается.
SSH интеграция
Один из способов взаимодействия разработчиков с удаленными серверами помимо FTP-клиентов — через SSH. SSH используется для подключения к удаленным серверам и делает все от базовой конфигурации до запуска Git или запуска веб-сервера.
С Fabric вы можете выполнять действия SSH с локального компьютера.
Пример ниже определяет функции, которые показывают, как проверить свободное место на диске и тип хоста. Он также определяет, какой хост будет запускать команду:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Import Fabric’s API module
from fabric.api import run
env.hosts = ‘159.89.39.54’
# Set the username
env.user = «root»
def host_type():
run(‘uname -s’)
def diskspace():
run(‘df’)
def check():
# check host type
host_type()
# Check diskspace
diskspace()
|
Чтобы запустить этот код, вам нужно будет выполнить следующую команду на терминале:
1
|
fab check
|
Выход
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
fab check[159.89.39.54] Executing task ‘check’
[159.89.39.54] run: uname -s
[159.89.39.54] Login password for ‘root’:
[159.89.39.54] out: Linux
[159.89.39.54] out:
[159.89.39.54] run: df
[159.89.39.54] out: Filesystem 1K-blocks Used Available Use% Mounted on
[159.89.39.54] out: udev 242936 0 242936 0% /dev
[159.89.39.54] out: tmpfs 50004 6020 43984 13% /run
[159.89.39.54] out: /dev/vda1 20145768 4398716 15730668 22% /
[159.89.39.54] out: tmpfs 250012 1004 249008 1% /dev/shm
[159.89.39.54] out: tmpfs 5120 0 5120 0% /run/lock
[159.89.39.54] out: tmpfs 250012 0 250012 0% /sys/fs/cgroup
[159.89.39.54] out: /dev/vda15 106858 3426 103433 4% /boot/efi
[159.89.39.54] out: tmpfs 50004 0 50004 0% /run/user/0
[159.89.39.54] out: none 20145768 4398716 15730668 22% /var/lib/docker/aufs/mnt/781d1ce30963c0fa8af93b5679bf96425a0a10039d10be8e745e1a22a9909105
[159.89.39.54] out: shm 65536 0 65536 0% /var/lib/docker/containers/036b6bcd5344f13fdb1fc738752a0850219c7364b1a3386182fead0dd8b7460b/shm
[159.89.39.54] out: none 20145768 4398716 15730668 22% /var/lib/docker/aufs/mnt/17934c0fe3ba83e54291c1aebb267a2762ce9de9f70303a65b12f808444dee80
[159.89.39.54] out: shm 65536 0 65536 0% /var/lib/docker/containers/fd90146ad4bcc0407fced5e5fbcede5cdd3cff3e96ae951a88f0779ec9c2e42d/shm
[159.89.39.54] out: none 20145768 4398716 15730668 22% /var/lib/docker/aufs/mnt/ba628f525b9f959664980a73d94826907b7df31d54c69554992b3758f4ea2473
[159.89.39.54] out: shm 65536 0 65536 0% /var/lib/docker/containers/dbf34128cafb1a1ee975f56eb7637b1da0bfd3648e64973e8187ec1838e0ea44/shm
[159.89.39.54] out:
Done.
Disconnecting from 159.89.39.54… done.
|
Автоматизация задач
Fabric позволяет запускать команды на удаленном сервере без необходимости входа на удаленный сервер.
Удаленное выполнение с помощью Fabric может привести к угрозам безопасности, поскольку для этого требуется открытый порт SSH, особенно на компьютерах Linux.
Например, предположим, что вы хотите обновить системные библиотеки на вашем удаленном сервере. Вам не обязательно выполнять задачи через раз. Вы можете просто написать простой потрясающий файл, который вы будете запускать каждый раз, когда захотите выполнить задачи.
В этом случае вы сначала импортируете модуль Fabric API:
1
|
from fabric.api import *
|
Определите удаленный хост, который вы хотите обновить:
1
|
env.hosts = ‘159.89.39.54’
|
Установите имя пользователя удаленного хоста:
1
|
env.user = «root»
|
Хотя это не рекомендуется, вам может потребоваться указать пароль для удаленного хоста.
Наконец, определите функцию, которая обновляет библиотеки на вашем удаленном хосте.
1
2
3
4
5
6
|
def update_libs():
«»»
Update the default OS installation’s
basic default tools.
«»»
run(«apt-get update»)
|
Теперь, когда ваш потрясающий файл готов, все, что вам нужно сделать, это выполнить его следующим образом:
1
|
$ fab update
|
Вы должны увидеть следующий результат:
1
2
3
4
|
$ fab update
[159.89.39.54] Executing task ‘update’
[159.89.39.54] run: apt-get update
[159.89.39.54] Login password for ‘root’:
|
Если вы не определили пароль, вам будет предложено ввести его.
После того, как программа закончила выполнение определенных команд, вы получите следующий ответ, если ошибок не будет:
1
2
3
4
|
$ fab update
…………
Disconnecting from 159.89.39.54… done.
|
Вывод
В этом руководстве рассказывается, что необходимо для начала работы с Fabric локально и на удаленных хостах. Теперь вы можете с уверенностью начать писать свои собственные сценарии для создания, мониторинга или обслуживания удаленных серверов.