20 puntos por GN⁺ 2024-05-01 | 3 comentarios | Compartir por WhatsApp
  • Herramienta para automatizar infraestructura usando Python
  • Puede escalar rápidamente desde un solo servidor hasta miles de servidores
  • Adecuada para ejecutar comandos ad hoc, desplegar servicios y gestionar configuraciones

Por qué usar pyinfra

  • Puede ejecutarse a gran velocidad con rendimiento predecible sobre miles de objetivos
  • Permite depuración inmediata con salida en tiempo real de stdin/stdout/stderr (-vvv)
  • Ofrece diff y dry run antes de aplicar cambios, brindando idempotencia (Idempotent operations)
  • Ofrece extensibilidad con todo el ecosistema de paquetes de Python
  • Puede ejecutarse sin agentes en cualquier dispositivo con SSH disponible
  • Se integra con conectores como Docker, Terraform y Vagrant

Inicio rápido

  • Instala pyinfra con el comando pip install pyinfra
  • Es posible ejecutar comandos mediante SSH
    • pyinfra my-server.net exec -- echo "hello world"
  • Es posible especificar objetivos como Docker, la máquina local y otros conectores
    • pyinfra @docker/ubuntu exec -- echo "Hello world"
    • pyinfra @local exec -- echo "Hello world"
  • Además de ejecutar comandos, se pueden definir estados usando operaciones
    • pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
  • Esto se puede guardar en un archivo Python como deploy.py y ejecutarlo
  • Se puede desplegar todo combinando inventario, operaciones y código Python

Para más detalles, consulta la guía de inicio, la guía de uso de operaciones, el uso de inventario y datos, los argumentos globales y el uso del CLI, o revisa los ejemplos documentados.

Opinión de GN⁺

  • Como herramienta de despliegue, la seguridad y el control son importantes, pero al estar enfocada en funciones de gestión de infraestructura, puede haber posibilidades de problemas en el proceso de despliegue
  • Como pyinfra no impone por sí mismo mejores prácticas de despliegue, el equipo debe definir y gestionar reglas por separado
  • Usar Python como lenguaje permite aprovechar su ecosistema y resulta familiar para desarrolladores, pero tiene una barrera de entrada frente a otras herramientas comunes de despliegue
  • Parece una herramienta adecuada para escenarios de despliegue simples y flexibles; para despliegues complejos de nivel empresarial, herramientas más maduras como Ansible o Puppet podrían ser más apropiadas
  • Es positivo que se integre con herramientas IaC como Terraform o Pulumi, aunque queda la duda de si hay muchas tareas que no puedan resolverse solo con ellas

3 comentarios

 
savvykang 2024-05-02

Creo que hace falta una forma de definir playbooks en Ansible aparte de YAML. Me parece un enorme desperdicio que Ansible vuelva a implementar funciones de Python como filtros de jinja para ofrecerlas con el fin de procesar datos. No habría problema si el esquema de los facts del playbook coincidiera con la entrada de las tasks, pero en la práctica hay muchas más situaciones en las que el procesamiento intermedio de datos es inevitable. También da la impresión de que haber usado Jinja para el procesamiento de datos no fue una decisión técnica muy visionaria.

 
xguru 2024-05-01

pyinfra - herramienta de automatización de infraestructura basada en Python

Ya lo había compartido una vez cuando salió la versión 1.0, pero han seguido actualizándolo activamente.
Ahora va por la versión 2.92, y la 3.0, que actualmente está en beta, se lanzará pronto.

 
GN⁺ 2024-05-01
Opiniones en Hacker News

Resumen:

  • Ansible requiere un intérprete de Python en los sistemas objetivo, pero Pyinfra solo necesita un shell. Pyinfra es un software subestimado.
  • Ansible es bueno, pero al final terminas escribiendo Python dentro de cadenas YAML. En ese caso, es mejor usar Python directamente desde el principio.
  • Un desarrollador de Pyinfra comentó y recomendó usar la v3, que actualmente está en beta. Dijo que es estable y que se está preparando el lanzamiento oficial.
  • Hay varios enlaces a publicaciones anteriores de HN relacionadas con Pyinfra.
  • Un usuario cambió de Ansible a Pyinfra y opinó que Pyinfra es mucho más limpio. También dijo que le resultó útil poder usar Pyinfra en entornos Fedora CoreOS sin Python.
  • También hay una opinión de que Puppet es la herramienta más adecuada en este ámbito. Es simple y, cuando hace falta, ofrece capacidades de lenguaje de programación. Aun así, necesita mejoras en usabilidad.
  • Usar herramientas de CM (gestión de configuración) puede ser muy difícil. Incluso los expertos coinciden en que el costo de mantenimiento es alto. Deberían evolucionar hacia una integración más estrecha con contenedores.
  • Puede que Python no sea ideal para la gestión de infraestructura. Tiene limitaciones como la compilación de binarios, la reproducibilidad de paquetes y la falta de tipado estático.
  • Se presenta una forma sencilla de desplegar servicios combinando Pyinfra, Docker y Tailscale. Antes se habría usado Kubernetes, pero resulta excesivo y además es difícil de depurar.
  • Gracias a Pyinfra fue posible evitar los problemas crónicos de Ansible. Pyinfra permite definir inventario y variables de forma flexible mediante scripts de Python, lo que resulta conveniente.