Automatización de entornos con Puppet #1

Mascote do LinuxPro na sala de servidores, com quatro racks iguais controlados por fios de marionete e o logo do Puppet Labs na parede

Nota (2026): Texto original de abril de 2017 — introducción a Puppet todavía con el vocabulario de Puppet Labs / “master”, con la promesa de un #2 práctico que nunca llegó. Nueve años después el lenguaje declarativo es el mismo, pero el paquete público cambió de dueño: Perforce retiró los binarios abiertos a finales de 2024 y la comunidad (Vox Pupuli) continúa el proyecto como OpenVox 8. Comando, ruta y módulos de la Forge siguen; el repositorio no.

Puppet describe el estado deseado de la máquina — paquete instalado, servicio en marcha, archivo con este contenido — y el agente convierte la diferencia en acción. No escribes el “cómo instalar nginx en esta distro”; escribes que nginx debe existir. En parques grandes eso es lo que separa un runbook de un contrato.

Lo que Puppet hace (y lo que no hace)

Creado en 2005 por Luke Kanies, Puppet es un gestor de configuración declarativo, Apache 2.0. Cada recurso (package, file, service, user, cron…) es un hecho sobre el nodo. El agente compara el hecho con la realidad y aplica solo el delta. Idempotente: ejecutarlo de nuevo no rompe lo que ya está bien.

Esto cubre lo que el post de 2017 enumeraba: estandarizar paquete, servicio y archivo en miles de nodos, auditar drift, reponer archivo mediante el filebucket. No cubre lo que Ansible cubre mejor: play ad-hoc, orquestación de extremo a extremo, “ejecute este comando ahora en este grupo”. Son herramientas vecinas, no clones. El howto de Ansible en el sitio está en Automatizando servidores Linux con Ansible.

El producto comercial de Perforce sigue existiendo (Puppet Enterprise). Lo que desapareció del mapa abierto fue el yum/apt.puppet.com gratis para todo el parque. Quien necesita el OSS en 2026 instala OpenVox — la serie estable es la 8, y la 9.0.0-rc1 salió el 4 de septiembre de 2026, todavía como candidata.

El ciclo: facts → catálogo → apply → informe

El diseño no cambió. Cambiaron los nombres: el antiguo “Puppet Master” es el openvox-server (ex-puppetserver); el agente es el paquete openvox-agent, pero el binario sigue llamándose puppet y vive en /opt/puppetlabs / /etc/puppetlabs.

nó (agente)
  1. coleta facts (os, memória, IP, discos, custom facts)
  2. envia facts ao servidor  ──►  openvox-server
  3. servidor compilou o catálogo deste certname
  4. agente recebe o catálogo  ◄──
  5. aplica recursos (ou --noop, só simula)
  6. manda relatório           ──►  openvoxdb (opcional)

Dos modos, los mismos de 2017:

  • puppet apply — manifiesto local, sin servidor. Laboratorio, bootstrap, máquina única.
  • Agente / servidor — el nodo solicita el catálogo de vez en cuando (temporizador de systemd o demonio). Parque de máquinas de verdad.
# simula sem mudar nada
sudo puppet agent --test --noop

# aplica de verdade, verbose, uma vez
sudo puppet agent --test

# só local
sudo puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp

El antiguo diagrama de esta entrada aún hablaba de Puppet Explorer y MCollective. Ambos han quedado fuera de juego. La consola/informe hoy pasan por OpenVoxDB, Foreman o el propio informe del agente.

Un manifiesto mínimo

Todo en Puppet es un recurso. El ejemplo de abajo instala nginx, asegura el servicio y dispara un reinicio si el archivo cambia — el trío que resuelve el 80% del “quiero este demonio en marcha”.

# site.pp (ou um profile)
package { 'nginx':
  ensure => installed,
}

file { '/etc/nginx/nginx.conf':
  ensure  => file,
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  source  => 'puppet:///modules/perfil/nginx.conf',
  require => Package['nginx'],
  notify  => Service['nginx'],
}

service { 'nginx':
  ensure => running,
  enable => true,
}

El lenguaje es el mismo que el del manual de la comunidad BR (puppet-br.github.io/apostila-puppet) y de los módulos de Forge: OpenVox 8.11+ es funcionalmente equivalente a Puppet 8, por lo que el módulo, Puppetfile y el libro antiguo siguen siendo válidos. Lo que ya no sigue siendo válido es el repositorio de paquetes.

En 2026: instala OpenVox, no apt.puppet.com

A finales de 2024 Perforce dejó de publicar públicamente los paquetes OSS. Vox Pupuli (Overlook InfraTech + OSUOSL en el mirror) pasó a reconstruir y evolucionar el código como OpenVox. En junio de 2026 el agente está en 8.28; el 9 ya va por beta. Red Hat Satellite 6.19 documenta OpenVox Server/Agent 8 y trata Puppet 7 como EOL. El módulo puppet-puppet de Foreman acepta los nuevos nombres de paquetes.

Debian/Ubuntu siguen incluyendo puppet-agent 8.10 en el archivo de la distro: código sin upstream, bug de Debian #1133413 / Ubuntu #2165065. OpenVox va más de quince releases por delante. No mezcle ambos en el mismo sistema: el paquete OpenVox sustituye a Puppet. Antes de migrar, copie /etc/puppetlabs/ entero.

# Ubuntu 24.04 / 26.04 — OpenVox 8
wget https://apt.voxpupuli.org/openvox8-release-ubuntu24.04.deb
sudo apt install ./openvox8-release-ubuntu24.04.deb
sudo apt update
sudo apt install openvox-agent

# Debian 12
wget https://apt.voxpupuli.org/openvox8-release-debian12.deb
sudo apt install ./openvox8-release-debian12.deb
sudo apt update
sudo apt install openvox-agent

# EL 9 (RHEL / Alma / Rocky)
sudo dnf install https://yum.voxpupuli.org/openvox8-release-el-9.noarch.rpm
sudo dnf install openvox-agent

Servidor, DB y Bolt comparten el mismo prefijo: openvox-server, openvoxdb, openbolt. Keyring: https://apt.voxpupuli.org/openvox-keyring.gpg. Guía oficial: voxpupuli.org/openvox/install. Documentación: docs.openvoxproject.org.

Hiera para el módulo de Foreman, si el repositorio de OpenVox ya está en el nodo:

puppet::client_package: openvox-agent
puppet::server_package: openvox-server

Puppet, Ansible y el pipeline

Regla práctica en Linux de 2026:

  • Puppet/OpenVox — convergencia continua. El nodo vuelve por sí solo al estado del catálogo, cada hora, incluso si alguien lo “arregló a mano”.
  • Ansible — orquestación y play puntual. Empuja el cambio ahora y desaparece. Mejor para bootstrap, ventanas de parcheo y lo que no necesita un daemon en el destino.
  • CI/CD — prueba el manifiesto/playbook en Git antes de que el parque lo reciba. El vocabulario está en DevOps, qué es CI/CD.

Mucha gente usa ambos: Ansible (o cloud-init) instala el agente; OpenVox mantiene el estado a partir de ahí.

Lo que aún sirve de la lista de 2017

  • Parque grande con equipo pequeño — el catálogo es el contrato, no el wiki.
  • Filebucket — el archivo que Puppet sustituyó sigue siendo recuperable.
  • --noop — simula la ejecución, genera el informe, no toca el disco. Úselo antes de promover un módulo nuevo.
  • Facts — el catálogo es por nodo; os.family elige el paquete correcto sin if ubuntu esparcido.

Lo que no vale: enlace de puppetlabs.com para descarga OSS, el grupo “master”, MCollective como bus, y la idea de que apt install puppet-agent de la distro está siguiendo al upstream.

Comunidad BR: manual en puppet-br.github.io/apostila-puppet y el grupo Telegram puppetbr. Código e issues del fork: github.com/openvoxproject.