Puppet R10K
Contenido
Instalación
Hay diferentes alternativas como se puede ver en esta página.
He hecho una primera instalación como gema de la siguiente forma:
$ gem install r10k
Puppetfile
Puppetfile es el fichero que define los módulos que va a tener un entorno. Este fichero tiene una estructura en la que se definen directorios y módulos que va a tener cada uno de ellos.
Como ejemplo:
He creado un directorio puppet/environments/develop/ y ahí dentro he creado el fichero Puppetfile
moduledir 'modules' mod 'apache', :git => 'ssh://git@gitlab.local/DevOps/THIRDPARTY_puppetlabs_apache.git', :branch => 'master' moduledir 'profiles', mod 'mymodule', :git => 'ssh://git@gitlab.local/DevOps/PROFILES_mymodule.git', :tag => '0.1.0'
Sobre ese directorio se ejecuta:
r10k puppetfile install
Y aparece mágicamente el directorio modulos con el módulo de apache
Entornos dinámicos
Usando esta técnica se pueden crear lo que se llama entornos dinámicos. Podemos crear un directorio de environment, como el del ejemplo de antes, y este lo podemos meter en un repositorio de git. En ese repositorio de git podemos crear diferentes ramas, uno por cada entorno que queramos tener, y podemos hacer los cambios que creamos neceasrios en cada una de las ramas.
Después, r10k, se encargará de descargarse cada una de esas ramas como si fuera un environment diferente, con el mismo nombre de la rama, y ejecutará por cada uno de esos environments el Puppetfile con sus módulos.
Además, podemos combinar esta técnica con la de tener un fichero de configuración de entorno, el environment.conf, para poder configurar cada entorno con varios directorios de módulos, y así tener separados en cada environment los móduos de terceros, los módulos propios, los perfiles, etc...
Fichero de configuración de entornos dinamicos r10k
Para definir un entorno dinámico solo tenemos que crear un fichero yaml, r10k.yaml, donde indicaremos los datos de origen de nuestro repositorio Puppetfile.
Por ejemplo, en nuestro servidor de puppet master podemos tener el fichero en /etc/puppetlabs/puppet/r10k.yaml, y éste conteniendo lo siguiente:
--- :cachedir: 'r10k/cache' :sources: :eci: :remote: 'git@gitlab.eci.geci:DevOps/ENVIRONMENTS_r10k.git' :basedir: 'environments'
En este fichero estamos definiendo cual es el repo Git de origen donde están nuestros puppetfiles. También definimos el directorio donde se van a crear nuestros entornos.
Posicionandonos sobre el directorio /etc/puppetlabs/puppet/ ejecutamos lo siguiente:
$ r10k deploy environment
Esto desencadena el bajarse el repositorio de r10k con los puppetfiles, y creara un working directorio diferente por cada uno de los branches que tenga el repo de Git en el directorio que hemos definido como nuestro basedir, que será el directorio que tengamos configurado en puppet como directorio de "environments"
Cada uno de esos directorios tendrá su puppetfile (el que haya en el branch en concreto), y r10k lo interpretará y descargará todos los módulos que estén definidos en cada uno de ellos.