Skip to main content

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.

  1. La configuración del nodo en concreto
  2. La configuración de la familia de sistema operativo
  3. 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/data/osfamily/{Debian,Ubuntu,RedHat,Centos}
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Debian/10.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Debian/11.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Ubuntu/20.04.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Ubuntu/22.04.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/RedHat/8.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/RedHat/9.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Centos/7.yaml
echo --- > /etc/puppetlabs/code/environments/production/data/osfamily/Centos/8.yaml

Common packages

Fuerce al sistema a usar hiera

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.psc.local':   ip => '192.168.0.3', host_aliases => [ 'puppet' ] }
  host { 'puppet-client.psc.local':   ip => '192.168.0.4', host_aliases => [ 'puppet-client'] }
}
hiera_include('classes')

En la carpeta del entorno, cree el fichero debian_common_packages.pp

cd /etc/puppetlabs/code/environments/production/manifests/
nano debian_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 Debian.

class debian_common_packages {

  package { 'net-tools':
    ensure => 'latest'
  }
  package { 'htop':
    ensure => 'latest'
  }
  package { 'dos2unix':
    ensure => 'latest'
  }
  package { 'curl':
    ensure => 'latest'
  }
  package { 'jq':
    ensure => 'latest'
  }

}

Deje el fichero common.yaml con el siguiente contenido, ya que solo se usara para aquellas configuraciones comunes en todos los sistemas operativos (Windows, Debian, Ubuntu, RedHat...)

echo --- /etc/puppetlabs/code/environments/production/data/common.yaml

Configure el fichero hiera de Debian 11 para que haga uso de dichos paquetes

cat <<endblock > /etc/puppetlabs/code/environments/production/data/osfamily/Debian/11.yaml
---

classes:
  - debian_common_packages
endblock

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

Cree tantos paquetes comunes para las diferentes distribuciones Linux.