Configuración de entorno
Por defecto Puppet Server crea un entorno llamado production. Podemos crear tantos como nos interese, sin embargo proceda con la configuración de que viene por defecto para comprobar que la instalación es correcta.
Configuración de la jerarquía
En puppet se puede definir una jerarquia a la hora de aplicar los ficheros de configuración.
- La configuración del nodo en concreto
- La configuración de la familia de sistema operativo
- Paquetes comunes
Edite el fichero
nano /etc/puppetlabs/code/environments/production/hiera.yaml
y modifiquelo para tener el siguiente contenido. Se ha cambiado el trusted.certname por hostname y se ha añadido el osfamily.
---
version: 5
defaults:
# The default value for "datadir" is "data" under the same directory as the hiera.yaml
# file (this file)
# When specifying a datadir, make sure the directory exists.
# See https://puppet.com/docs/puppet/latest/environments_about.html for further details on environments.
datadir: data
data_hash: yaml_data
hierarchy:
- name: "Per-node data (yaml version)"
path: "nodes/%{::trusted.certname}.yaml"
- name: "Per-os data"
path: "osfamily/%{::operatingsystem}/%{::operatingsystemmajrelease}.yaml"
- name: "Other YAML hierarchy levels"
paths:
- "common.yaml"
Como posibles parámetros del node, existen los siguientes
::trusted.certname
Usa el FQDN del equipo como nombre del fichero, recomendable si el mismo puppet gestiona equipos de diferentes dominios y puede colisionar el nombre.
::hostname
Usa solo el hostname de la máquina, si solo va a gestionar los dominios de un equipo y no van a colisionar nunca.
Genere la estructura de carpetas para el osfamily y algunos yaml para los sistemas operativos más comunes
mkdir -p /etc/puppetlabs/code/environments/production/osfamily/{Debian,Ubuntu,RedHat,Centos}
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Debian/10.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Debian/11.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Ubuntu/20.04.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Ubuntu/22.04.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/RedHat/8.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/RedHat/9.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Centos/7.yaml
echo --- > /etc/puppetlabs/code/environments/production/osfamily/Centos/8.yaml
Common packages
En la carpeta del entorno, cree el fichero common_packages.pp
cd /etc/puppetlabs/code/environments/production/manifests/
nano common_packages.pp
Y añada el contenido deseado, por ejemplo puede añadir los siguientes paquetes que por lo general se suelen usar en los sistemas Linux.
class common_packages {
package { 'net-tools':
ensure => 'installed'
}
package { 'htop':
ensure => 'installed'
}
package { 'fail2ban':
ensure => 'installed'
}
}
Ahora cree el fichero de paquetes comunes para el environment.
cat <<endblock >> /etc/puppetlabs/code/environments/production/data/common.yaml
---
classes:
- common_packages
endblock
echo "hiera_include('classes')" >> /etc/puppetlabs/code/environments/production/manifests/site.pp
Quedando de la siguiente manera
root@puppet-master:~# cat /etc/puppetlabs/code/environments/production/manifests/site.pp
node default {
resources { 'host': purge => true }
host { 'localhost': ip => '127.0.0.1', }
host { 'puppet-master.psc.local': ip => '192.168.0.3', host_aliases => [ 'puppet-master', 'puppet' ] }
host { 'puppet-client.psc.local': ip => '192.168.0.4', host_aliases => [ 'puppet-client'] }
}
hiera_include('classes')
Reincie el servidor puppet y realice la prueba
systemctl restart puppetserver
Desinstale alguno de los paquetes comunes
y ejecute el comando de actualización del agente.
puppet agent -vt
Podrá ver como vuelve a instalar el paquete htop
eliminado