Puppet: validación de la configuración de Puppet

En Puppet, la configuración se puede probar localmente. Por lo tanto, una vez que hemos configurado Puppet master y node, es hora de validar la configuración localmente. Necesitamos tener Vagrant y Vagrant Box instalados localmente, lo que ayuda a probar la configuración localmente.

Configuración de la máquina virtual

Como estamos probando la configuración localmente, en realidad no necesitamos un Puppet master en ejecución. Esto significa que sin realmente ejecutar Puppet master en el servidor, podemos simplemente usar Puppet para aplicar el comando para la validación de configuración de Puppet. El comando de aplicación de marionetas aplicará los cambios delocal/etc/puppet dependiendo del nombre de host de la máquina virtual en el archivo de configuración.

El primer paso que debemos realizar para probar la configuración es construir lo siguiente Vagrantfile y poner en marcha una máquina y montar el /etc/puppetcarpeta en su lugar. Todos los archivos que se requieran se colocarán dentro del sistema de control de versiones con la siguiente estructura.

Estructura de directorios

- manifests 
   \- site.pp 
- modules 
   \- your modules  
- test 
   \- update-puppet.sh 
   \- Vagrantfile 
- puppet.conf

Archivo vagabundo

# -*- mode: ruby -*- 
# vi: set ft = ruby : 
Vagrant.configure("2") do |config| 
   config.vm.box = "precise32" 
   config.vm.box_url = "http://files.vagrantup.com/precise64.box" 
   config.vm.provider :virtualbox do |vb| 
      vb.customize ["modifyvm", :id, "--memory", 1028, "--cpus", 2] 
   end 
  
   # Mount our repo onto /etc/puppet 
   config.vm.synced_folder "../", "/etc/puppet"  
   
   # Run our Puppet shell script   
   config.vm.provision "shell" do |s| 
      s.path = "update-puppet.sh" 
   end  
 
   config.vm.hostname = "localdev.example.com" 
end

En el código anterior, hemos utilizado el aprovisionador de Shell en el que intentamos ejecutar un script de Shell llamado update-puppet.sh. El script está presente en el mismo directorio donde se encuentra el archivo Vagrant y el contenido del script se enumera a continuación.

!/bin/bash 
echo "Puppet version is $(puppet --version)" 
if [ $( puppet --version) != "3.4.1" ]; then  
   echo "Updating puppet" 
   apt-get install --yes lsb-release 
   DISTRIB_CODENAME = $(lsb_release --codename --short) 
   DEB = "puppetlabs-release-${DISTRIB_CODENAME}.deb" 
   DEB_PROVIDES="/etc/apt/sources.list.d/puppetlabs.list"  
   
   if [ ! -e $DEB_PROVIDES ] 
   then 
      wget -q http://apt.puppetlabs.com/$DEB 
      sudo dpkg -i $DEB 
   fi  
sudo apt-get update 
   sudo apt-get install -o Dpkg::Options:: = "--force-confold" 
   --force-yes -y puppet 
else 
   echo "Puppet is up to date!" 
fi

Procesamiento adicional, el usuario debe crear un archivo de manifiesto dentro del directorio Manifests con el nombre site.pp que instalará algún software en VM.

node 'brclelocal03.brcl.com' { 
   package { ['vim','git'] : 
      ensure => latest 
   } 
} 
echo "Running puppet" 
sudo puppet apply /etc/puppet/manifests/site.pp

Una vez que el usuario tiene listo el script anterior con la configuración de archivo Vagrant requerida, el usuario puede acceder al directorio de prueba y ejecutar el vagrant up command. Esto iniciará una nueva máquina virtual, más tarde, instalará Puppet y luego lo ejecutará usando el script de Shell.

Lo siguiente será la salida.

Notice: Compiled catalog for localdev.example.com in environment production in 0.09 seconds 
Notice: /Stage[main]/Main/Node[brclelocal03.brcl.com]/Package[git]/ensure: created 
Notice: /Stage[main]/Main/Node[brcllocal03.brcl.com]/Package[vim]/ensure: ensure changed 'purged' to 'latest'

Validación de la configuración de varias máquinas

Si necesitamos probar la configuración de varias máquinas localmente, puede hacerlo simplemente haciendo un cambio en el archivo de configuración de Vagrant.

Nuevo archivo vagabundo configurado

config.vm.define "brclelocal003" do |brclelocal003| 
   brclelocal03.vm.hostname = "brclelocal003.brcl.com" 
end  

config.vm.define "production" do |production| 
   production.vm.hostname = "brcleprod004.brcl.com" 
end

Supongamos que tenemos un nuevo servidor de producción, que necesita la utilidad SSL instalada. Solo necesitamos extender el manifiesto antiguo con la siguiente configuración.

node 'brcleprod004.brcl.com' inherits 'brcleloacl003.brcl.com' { 
   package { ['SSL'] : 
      ensure => latest 
   } 
}

Después de realizar cambios de configuración en el archivo de manifiesto, solo necesitamos movernos al directorio de prueba y ejecutar el comando básico de vagrant up que mostrará ambos brclelocal003.brcl.com y brcleprod004.brcl.commáquina. En nuestro caso, estamos tratando de poner en funcionamiento la máquina de producción, lo que podría hacerse ejecutando elvagrant up production command. El creará una nueva máquina con el nombre de producción como se define en el archivo Vagrant y tendrá el paquete SSL instalado en él.