Puppet, es una herramienta para la gestión de configuraciones de hosts. Esto funciona de la siguiente manera: tu tienes un host maestro con todas las configuraciones y los clientes se conectan a este y cogen la configuración que les toca. De esta forma, podemos tener muchos hosts auto-configurados sin tener que hacerlo uno a uno.
Maestro
Descargar el paquete para cargar los repositorios (dependiendo la versión de linux que se tenga será uno u otro)
cd /tmp/ && wget http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -c -s`.deb
Instalar el paquete descargado
dpkg -i puppetlabs-release-`lsb_release -c -s`.deb
Actualizar los repositorios
aptitude update
Instalar los paquetes necesarios para puppet
aptitude install vim-puppet puppetmaster-passenger ntp etckeeper puppetlabs-apache
Parar el servicio de apache
service apache2 stop
Ahora lo recomendable, es congelar la versión de puppet ya que si se actualiza a una versión mayor puede dar problemas de configuración
Comprobar la versión
puppet help | tail -n 1
Crear el archivo 00-puppet.pref
vim /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger Pin: version 3.7.* Pin-Priority: 501
Borrar los certificados existentes
rm -rf /var/lib/puppet/ssl
Editar el archivo de configuración de puppet
vim /etc/puppet/puppet.conf
Añadir al final del apartado [main] lo siguiente
certname = masterofpuppets dns_alt_names = masterofpuppets,masterofpuppets.ichasco.com
Generar los nuevos certificados para puppet
puppet master --verbose --no-daemonize
[cuando aparezca el siguiente mensaje pulsar CTRL-C]
Notice: Starting Puppet master version 3.7.2
Ver el certificado creado
puppet cert list -all
Iniciar apache
service apache2 start
Nota: Puede que de problemas con los certificados, si es así, sustituirlos por los buenos.
Agente
Descargar el paquete para cargar los repositorios (dependiendo la versión de linux que se tenga será uno u otro)
cd /tmp/ && wget http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -c -s`.deb
Instalar el paquete descargado
dpkg -i puppetlabs-release-`lsb_release -c -s`.deb
Actualizar los repositorios
aptitude update
Instalar los paquetes necesarios para puppet
aptitude install puppet
Ahora lo recomendable, es congelar la versión de puppet ya que si se actualiza a una versión mayor puede dar problemas de configuración
Comprobar la versión
puppet help | tail -n 1
Crear el archivo 00-puppet.pref
vim /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common Pin: version 3.7.* Pin-Priority: 501
Editar el archivo de configuración de puppet
vim /etc/puppet/puppet.conf
Borrar la sección de [master] y añadir una sección nueva de [agent]
[agent] server = masterofpuppets.ichasco.com
Reiniciar el servicio
service puppet restart
En el servidor, comprobar que el cliente esté conectado
puppet cert list
"clientpuppet.ichasco.com" (SHA256) F2:08:D6:8D:31:1A:AF:F9:ED:71:G5:61:4F:D8:6U:B3:C5:EC:4A:5D:16:20:7D:A5:DA:3B:2A:41:64:B2:6F:0F
Firmar el certificado para el cliente. Se puede hacer para un cliente especifico o para todos a la vez
Para todos:
puppet cert sign --all
Para uno en concreto:
puppet cert sign clientpuppet.ichasco.com
Notice: Signed certificate request for clientpuppet.ichasco.com Notice: Removing file Puppet::SSL::CertificateRequest cliente.ichasco.com at '/var/lib/puppet/ssl/ca/requests/cliente.ichasco.com.pem'
Revocar certificados
puppet cert clean <host_FQDN>
Ver los certificados firmados
puppet cert list --all
+ "clienpuppet.ichasco.com" (SHA256) F2:08:D6:8D:31:1A:AF:F9:ED:71:G5:61:4F:D8:6U:B3:C5:EC:4A:5D:16:20:7D:A5:DA:3B:2A:41:64:B2:6F:0F + "puppet" (SHA256) C7:13:F4:68:A5:FF:85:EE:F9:B6:EF:63:5F:2D:5D:AC:11:DC:26:45:4F:7F:EE:07:4E:3C:C1:1A:GH:F3:3C:9C (alt names: "DNS:masterofpuppet.ichasco.com", "DNS:puppet")
Habilitar el agente y lanzar una prueba en el cliente
puppet agent --enable
puppet agent --test --server masterofpuppets.ichasco.com
El mensaje que tiene que salir
Info: Caching certificate_revocation_list for ca Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for clientpuppet.ichasco.com Info: Applying configuration version '1459840778'
Pequeña comprobación para testear que todo está bien, para eso vamos a crear un manifiesto que cree un fichero en el /tmp del agente y que muestre la IP que tiene
Crear el manifiesto
vim /etc/puppet/manifests/site.pp
file {'/tmp/IP-prueba': ensure => present, mode => 0644, content => "Direccion IP: ${ipaddress_eth0}.\n", }
En el agente hay que ejecutar el siguiente comando para que el agente se conecte al maestro
puppet agent --test
Ahora en el agente debería de haberse creado en /tmp un fichero con el nombre IP-prueba.
Extra
Configurar Ruby en UTF-8
vim /usr/share/puppet/rack/puppetmasterd/config.ru
#FIX UTF-8 Encoding.default_external = Encoding::UTF_8
Reiniciar apache2
service apache2 restart
Activar vim para puppet
vim-addons -w install puppet
Puppet master no recibe los certificados para firma
En el servidor comprobar que puppet master está funcionando
puppet master
En el agente forzar la petición de firmado
puppet agent --server masterofpuppets.ichasco.com --waitforcert 60 --test