Skip to main content

Puppet

¿Qué es Puppet?

Puppet es un software de automatización de IT que ayuda a los administradores de sistemas a gestionar infraestructuras de computadoras y servidores de cualquier tamaño. Usando Puppet, puede automatizar fácilmente tareas repetitivas y desplegar rápidamente instalaciones de software y configuraciones en todas las PCs de la red.

El método de funcionamiento se basa en recetas que son ejecutadas en el cliente cada vez que se conecta al servidor. Cuenta con un lenguaje declarativo que sirve para expresar la configuración del sistema, un esquema cliente-servidor para la distribución, y una librería para ejecutar dicha configuración.

Nació como una propuesta evolutiva al cfengine, y permite administrar equipos de tipo POSIX (Unix*es, Linux, *BSD, Mac, etc.) sin ningún tipo de cambios: Las recetas de administración escritas se aplican indistintamente a los distintos sistemas operativos. En la actualidad cuenta con una capacidad básica de administración de equipos Windows, aunque avanza rápidamente.

¿Qué problemas trata de resolver Puppet?

Los administradores de sistemas comparten una serie de problemas comunes, que suelen resolverse de forma individual:

  • Scripts personalizados: La idea de "solución de problemas repetitivos" suele ser "crear un script para resolver el problema". Lo cual genera nuevos inconvenientes.
    • Distintas versiones del mismo script/archivo
    • Poca portabilidad entre instalaciones:
      • Entre distintos sistemas operativos
      • Entre distintas versiones del mismo sistema operativo
      • Cambio de criterio en el tiempo.
  • Gestión manual del software: instalar un nuevo software en todos los equipos de un grupo de computaduras suele involucrar el realizar la tarea N veces, una por PC.
    • Esfuerzo directamente proporcional al número de equipos.
    • Tareas repetitivas que tienden a provocar errores.
  • Configuraciones ad-hoc: Las configuraciones suelen realizarse manualmente y, por lo tanto, rara vez se unifica la misma.
    • Distintos criterios con el paso del tiempo.
    • Difícil implementación de un nuevo criterio.
    • Diferencia de estilo por cada persona en el equipo.
    • Barrera de entrada alta para nuevos integrantes
  • Restauración “bare metal” de un servidor: cuando un equipo se rompe, es necesario migrar de hardware o cambiar el disco, el proceso de instalación de cero requiere realizar las tareas nuevamente.
    • ¿Tenemos backup reciente del sistema operativo?
    • ¿La instalación es adecuada para el nuevo hardware?
    • ¿Qué cambios / adecuaciones le hicimos cuando lo instalamos?
    • Tiempos de recuperación y cortes de servicio excesivamente altos.
  • Restauración “bare metal” de N servidores: cuando es necesario escalar el problema anterior a múltiples equipos, se complejiza la tarea.
    • Llevar backups de sistema de N servidores es muy tedioso y costoso.
    • La diferencia “real” entre los servidores puede ser mínima.
    • “Reordenar” servicios entre servidores puede ser complejo.
  • Documentación: todas estas tareas descriptas suelen estar póbremente documentadas, documentadas en distintos lugares o desactualizadas.
    • ¿Qué servicios están activos?
    • ¿Dónde están instalados esos servicios?
    • ¿Qué “particularidades” tiene cada sistema instalado?
    • ¿Dónde están los drivers necesarios?
    • ¿Qué usuarios están habilitados en cada sistema?
    • ¿Que tan actualizada está la documentación?
  • Escalabilidad
    • A MAYOR cantidad de servidores MAYOR carga de mantenimiento!

Componentes y características

Las siguentes, entre muchas otras, son características que se pueden destacar de Puppet:

  • Abstracción de recursos: Puppet permite pensar los problemas de administración en forma abstracta, independizando al administrador de los detalles de bajo nivel.

    • Independencia de la implementación: "providers"
    • Pensamiento en alto nivel: "package", "user", etc.
    • Recursos relacionables entre si: "subscribe" / "notify", "require" / "before"
  • Lenguaje declarativo: Una ventaja de Puppet respecto a otras herramientas similares (cfengine, cheff, etc.) es que el lenguaje de Puppet es declarativo, ésto es, el administrador le dice a Puppet cómo desea que quede instalada y configurada una PC, y no qué pasos son necesarios para instalar y configura una PC.

    • Puppet se centra en la administración de “recursos”.
    • Se usa para describir el “estado” de un recurso, y no “cómo” lograr dicho estado.
    • Evita la “superposición” de declaraciones: Un recurso puede ser manejado en un único lugar.
    • Idempotencia: se obtiene el mismo resultado sin importar las veces que se aplique la configuración.
  • Tipos de recursos: Puppet cuenta con una extensa cantidad de abstracciones (en lenguaje de Puppet recursos) con los que administrar los equipos.

    • Usuario (user): home, uid, gid, groups, shell, ensure, comment
    • Archivo (file): checksum, content, backup, ensure (absent/present , file/directory), user, group, source, mode
    • Paquete de software (package): ensure (absent, purged, present/installed), responsefile, status
    • Servicio (service): ensure (running/stopped), enable (true/false), hasrestart, hasstatus
    • Tarea periódica (cron): command, user, hour, minute, month, weekday
    • Etc.
  • Características comunes a los lenguajes de programación: Puppet permite utilizar, además, elementos comunes a los lenguajes de programación

    • Selectores
    • If / then
    • Case
    • Funciones
    • Variables / Arrays
  • Ejemplos

    • Crear el usuario "jose" en todos los hosts administrados con Puppet y eliminar "juan":

      user { 'jose':
        ensure   => present,
        password => 'alguna_contraseña',
      }
      user { 'juan':
        ensure   => absent,
      }
      
    • Instalar el navegador firefox en todos los equipos:

      package { 'firefox':
        ensure => present,
      }
      
    • Instalar el navegador firefox en todos los equipos, pero hacer que siempre esté actualizado a la última versión disponible:

      package { 'firefox':
        ensure => latest,
      }
      
  • Además, Puppet cuenta con múltiples características extra, tales como:

    • Reportes
    • Gráficas
    • Extensibilidad
    • Datos de características de cada nodo en el que corre
    • Repositorios en Internet (por ejemplo http://github.com/netmanagers) con recetas ya armadas, libremente disponibles, para realizar multplicidad de tareas, desde configurar un servidor de Web hasta instalar el software de administración de una UPS.

Más información

Puede ver recetas creadas por netmanagers y de libre descarga en http://github.com/netmanagers

Share