Cuidado al gestionar módulos con r10k

En r10k moderno, la forma correcta de instalar los módulos de un environment es ejecutando el comando desde el directorio del environment donde está el Puppetfile. Es decir:

cd /etc/puppetlabs/code/environments/development
r10k puppetfile install -v
cd /etc/puppetlabs/code/environments/production
r10k puppetfile install -v

r10k detecta automáticamente el directorio actual como el environment.

Ahora bien. Para no perder módulos, es importante tener en cuenta que cualquier módulo que no esté listado en el Puppetfile será eliminado automáticamente.

Ésto quiere decir que tenemos dos opciones:

Opción A: Gestionar todos los módulos con r10k

  • Incluye todos los módulos que necesites en el Puppetfile.
  • r10k se encargará de mantenerlos sincronizados.
  • Esta es la forma recomendada para producción.

Opción B: Separar los módulos gestionados de los no gestionados por r10k

Podemos tener dos carpetas:

rk10_modules/          # módulos gestionados por r10k
modules/    # módulos manuales

Y definir los directorios de módulos

2. Crear la estructura de directorios

r10k recomienda esta estructura mínima:

puppet-control/
├── environments/
│   ├── production/
│   │   └── Puppetfile
│   └── development/
│       └── Puppetfile
├── manifests/
└── README.md

Comandos para crearla:

mkdir -p environments/production
mkdir -p environments/development
mkdir manifests
echo "# Puppet control repository" > README.md

3. Crear Puppetfiles básicos

Puppetfile para production:

cat <<EOF > environments/production/Puppetfile
mod 'puppetlabs-stdlib', '>= 8.0.0'
mod 'puppetlabs-apache', '5.3.0'
EOF

Puppetfile para development:

cat <<EOF > environments/development/Puppetfile
mod 'puppetlabs-stdlib', '>= 8.0.0'
mod 'puppetlabs-apache', '5.3.0'
mod 'puppetlabs-mysql', '>= 10.0.0'
EOF

Nota: En desarrollo puedes añadir módulos extra para pruebas.

4. Primer commit

git add .
git commit -m "Primer commit: estructura de repositorio y Puppetfiles"

5. Crear ramas production y development

# Crear rama production y development
git branch production
git branch development

# Verificar ramas
git branch

Salida esperada:

* main
  production
  development

Ahora main puede servir como base, pero r10k usará las ramas production y development como entornos.

6. Subir repositorio al remoto (GitHub, GitLab, etc.)

git remote add origin <URL-del-repositorio>
git push -u origin main
git push -u origin production
git push -u origin development

7. Configurar r10k en el servidor Puppet

Crea /etc/puppetlabs/r10k/r10k.yaml:

---
cachedir: '/var/cache/r10k'
sources:
  puppet_control:
    remote: 'git@github.com:usuario/puppet-control.git'
    basedir: '/etc/puppetlabs/code/environments'

Luego, usa r10k para desplegar los entornos:

r10k deploy environments -pv

Esto creará:

/etc/puppetlabs/code/environments/production/modules/
/etc/puppetlabs/code/environments/development/modules/

Con los módulos definidos en cada Puppetfile.

8. Buenas prácticas

  1. Versiona siempre los Puppetfile en Git.
  2. Mantén production estable y development para pruebas.
  3. Automatiza r10k con cron o systemd para actualizar módulos.
  4. Nunca instales módulos manualmente fuera de Puppetfile.
Be the first to comment