Управлять инфраструктурой через Ansible значит писать YAML.
pyinfra убирает это из уравнения: деплой описывается обычным Python-кодом, без DSL и без новых концепций для изучения.pyinfra решает именно это: вы описываете деплой обычным Python-кодом, без DSL и без новых концепций для изучения.Что делает pyinfra
Превращает Python-скрипты в shell-команды и выполняет их на серверах по SSH, в Docker-контейнерах или локально. Работает без агентов, на целевых машинах ничего устанавливать не нужно.
Операции идемпотентны: если пакет уже установлен, повторный запуск ничего не сломает.
Установка:
pip install pyinfra
Быстрый старт прямо из CLI
Установить пакет на удалённый сервер или в Docker-контейнер в одну строку:
# На удалённый сервер
pyinfra my-server.net apt.packages iftop update=true _sudo=true
# В Docker-контейнер
pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
Полноценный деплой-скрипт
Те же операции, оформленные в файл
deploy.py:from pyinfra.operations import apt, systemd
apt.packages(
name="Установить nginx",
packages=["nginx"],
update=True,
_sudo=True,
)
systemd.service(
name="Запустить и включить nginx",
service="nginx.service",
running=True,
restarted=True,
enabled=True,
)
Инвентарь описывается в Python-файле
inventory.py:targets = ["web-1.example.com", "web-2.example.com", "@docker/ubuntu"]
Запуск:
pyinfra inventory.py deploy.py
Что важно знать
В скриптах доступен весь Python-экосистем: циклы, условия, импорт любых библиотек вроде
boto3 или requests. Можно получать инвентарь из Terraform, работать с Docker и Vagrant. Перед реальным применением изменений можно сделать dry-run через флаг --dry.Запуск с выводом всех команд для отладки:
pyinfra inventory.py deploy.py -v
pyinfra хорошо подходит командам, которые уже пишут на Python и хотят управлять инфраструктурой без перехода на отдельный язык конфигурации.➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
