Gestionar módulos de puppet mediante librarian-puppet | Algo de Linux

viernes, 7 de marzo de 2014

Gestionar módulos de puppet mediante librarian-puppet

He pensado que sería interesante mantener los módulos de puppet que uso habitualmente en mi centro mediante un sistema de control de versiones o VCS (Version Control System) como git combinado con librarian-puppet. Ésto me aportaría tres ventajas muy importantes:
  • Las propias de un sistema VCS, realizando un desarrollo en el que se mantenga un control de versiones que me permita gestionar fácilmente el software.
  • Compartir fácilmente los módulos desarrollados con otros administradores que realizan habitualmente las mismas tareas.
  • Implantar los módulos en el servidor puppet de una manera cómoda y sencilla.
Para empezar a probar el sistema y ponerlo en marcha, he creado una cuenta en github, donde iré subiendo los módulos puppet desarrollados: https://github.com/algodelinux

Como imagino que usaré la cuenta de git para subir otro tipo de desarrollos, aparte de los módulos puppet, he decidido crear un repositorio por cada módulo y nombrarlo comenzando siempre por el prefijo "puppet-" para distinguirlo de otras cosas que pudiera llegar a subir.

El primer módulo que he subido https://github.com/algodelinux/puppet-scripts-administrador. Se trata de un módulo que coloca una serie de scripts de administración en los servidores de terminales, portátiles y workstations del centro que me facilitan el trabajo de gestión de estos equipos. De momento, no voy a entrar en detalle acerca de para qué sirve cada script. Eso lo dejaré para otro post.

Lo que vamos a ver es cómo se pueden instalar y mantener actualizados en el servidor puppet los módulos que iré publicando en mi github usando como ejemplo el módulo mencionado anteriormente:


Primer paso.- Instalación.
Lo primero que hay que hacer es instalar librarian-puppet en el servidor:

servidor:~# gem install librarian-puppet

En mi caso, tengo un sistema de 64 bits en el servidor. Fuera por lo que fuera, librarian-puppet no se instalaba y gem me daba un error de que no se podía encontrar. Para solucionarlo, he actualizado rubygems y rubygems1.8 desde squeeze-backports y ahora sí he podido instalarlo:

servidor:~# apt-get -t squeeze-backports install rubygems rubygems1.8
servidor:~# gem install librarian-puppet


Segundo paso.- Configuración.
Una vez instalado librarian-puppet, nos situamos en el directorio de configuración de puppet y ejecutamos librarian-puppet init:

servidor:~# cd /etc/puppet
servidor:/etc/puppet# librarian-puppet init

Ésto creará varios ficheros (Puppetfile, Puppetfile.lock, .gitignore) y un directorio .tmp:
  • /etc/puppet/Puppetfile (donde añadiremos los módulos que queremos instalar)
  • /etc/puppet/Puppetfile.lock (mantiene información de los módulos instalados con librarian-puppet)
  • /etc/puppet/.gitignore (contiene los ficheros a ignorar por git: ./tmp y modules)
  • /etc/puppet/.tmp (para ficheros temporales y cachés)
El archivo que utilizaremos directamente para indicar los módulos que queremos instalar en nuestro servidor será /etc/puppet/Puppetfile. El resto son gestionados por librarian-puppet.

Tercer paso.- Utilización:

Instalación de un módulo en el servidor puppet:
Una vez instalado y configurado librarian-puppet, veréis que es muy sencillo instalar un módulo puppet alojado en mi cuenta de github:

Nos situamos en el directorio /etc/puppet:
servidor:~# cd /etc/puppet

Editamos el archivo Puppetfile que hemos generado al ejecutar: librarian-puppet init. El contenido inicial de este archivo es bastante descriptivo:

#!/usr/bin/env ruby
#^syntax detection

forge "http://forge.puppetlabs.com"

# mod 'puppetlabs/stdlib'

# mod 'ntp',
#   :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'

# mod 'apt',
#   :git => 'https://github.com/puppetlabs/puppetlabs-apt.git',
#   :ref => 'feature/master/dans_refactor'

Si os fijáis, básicamente tiene el repositorio de puppetlabs: http://forge.puppetlabs.com y algunos ejemplos de uso de módulos.

Abrimos la página de github con el módulo de puppet que queremos usar. Siguiendo con el ejemplo del módulo que comentaba al principio: https://github.com/algodelinux/puppet-scripts-administrador


Y pulsamos el botón que os he marcado con un cuadro de color rojo para copiar la URL de clonación del proyecto.

A continuación lo vamos a añadir al archivo /etc/puppet/Puppetfile. Para ello lo editamos y añadimos las dos líneas que he marcado en color amarillo y que van a permitir descargar el módulo:

#!/usr/bin/env ruby
#^syntax detection

forge "http://forge.puppetlabs.com"

# mod 'puppetlabs/stdlib'

# mod 'ntp',
#   :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'

# mod 'apt',
#   :git => 'https://github.com/puppetlabs/puppetlabs-apt.git',
#   :ref => 'feature/master/dans_refactor'

mod 'puppet-scripts-administrador',
    :git => 'https://github.com/algodelinux/puppet-scripts-administrador.git'

Si os fijáis, lo único que hacen estas dos líneas es indicarle a librarian-puppet cómo se llama el módulo, y de dónde obtenerlo.

Guardamos el archivo y, a continuación, ejecutamos el comando que lo va a instalar:

servidor:/etc/puppet# librarian-puppet install

Mejor dicho: librarian-puppet va a instalar todos los módulos indicados en el archivo Puppetfile.


Comprobar los módulos instalados mediante librarian-puppet:
Si queremos obtener un listado de los módulos instalados mediante librarian-puppet, ejecutaremos:

servidor:/etc/puppet# librarian-puppet show

Por ejemplo:
servidor:/etc/puppet# librarian-puppet show
puppet-scripts-administrador (0.0.1)


Actualizar los módulos instalados mediante librarian-puppet:
Si tenemos instalado un módulo puppet y el desarrollador lo ha actualizado, actualizarlo en el servidor  puppet mediante librarian-puppet es sencillísimo:

servidor:/etc/puppet# librarian-puppet update nombre-del-modulo

Por ejemplo:
servidor:/etc/puppet# librarian-puppet update puppet-scripts-administrador

Para obtener un listado de los comandos disponibles en librarian-puppet:
servidor:/etc/puppet# librarian-puppet 

Commands:
  librarian-puppet clean           # Cleans out the cache and install paths.
  librarian-puppet config          # Show or edit the config.
  librarian-puppet help [COMMAND]  # Describe available commands or one specific command
  librarian-puppet init            # Initializes the current directory.
  librarian-puppet install         # Resolves and installs all of the dependencies you specify.
  librarian-puppet outdated        # Lists outdated dependencies.
  librarian-puppet package         # Cache the puppet modules in vendor/puppet/cache.
  librarian-puppet show            # Shows dependencies
  librarian-puppet update          # Updates and installs the dependencies you specify.
  librarian-puppet version         # Displays the version.

Para obtener ayuda acerca de alguno de los comandos disponibles en librarian-puppet:
servidor:/etc/puppet# librarian-puppet help comando

Ejemplo:
servidor:/etc/puppet# librarian-puppet update

Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: