Buenas , hace un tiempo puse un post de como testar módulos de puppet con docker, pues bien mejorando la receta he creado michelangelo.
Esto es una chorrada pero que nos puede venir muy util a la hora de testar los modulos que es saber que dependencias hay , para ello lo que hacemos es generar el grafico de dependencias a la vez que testamos.
Para hacer todo esto hacemos una modificacion a nuestro proyecto stromboli añadiendo en el dockerfile lo siguiente
FROM iuscommunity/centos6 RUN yum install -y puppet RUN yum install -y wget RUN mkdir /opt/modules ADD puppet.conf /etc/puppet/ ENV modules "/opt/modules" ENV class "vanilla" ENTRYPOINT /usr/bin/puppet apply --graph --modulepath=${modules} -e "include ${class}"
Ponemos nuestro fichero de puppet.conf
[main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter templatedir=$confdir/templates graph = true graphdir = /tmp [master] # These are needed when the puppetmaster is run by passenger # and can safely be removed if webrick is used. ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Compilamos el nuevo contenedor.
docker build -t puppet_graph .
Una vez compilado lo que hacemos es lanzar el contenedor pero añadiendo un volumen en tmp para poder recuperar los .dot generados
docker run -it -v "path_module":/opt/modules/"name_module" -v /tmp:/tmp -e class="name_module" puppet_graph
Esto nos generara tres .dot en tmp
expanded_relationships.dot relationships.dot resources.dot
Aqui podreis ver las dependencias de vuestro modulo.
Hasta aqui bien no pues bueno os pongo un .sh para que hagais esto automaticamente y asi no tener que estar tirando comandos.
#!/bin/bash if [ $# -eq 0 ] ; then echo "syntax michelangelo path_module name_module" else docker run -it -v ${1}:/opt/modules/${2} -v /tmp:/tmp -e class="${2}" puppet_graph pushd /tmp for i in `sudo find . -type f -iname '*.dot' | cut -d '.' -f2 | tr -d /`; do dot -Tpng $i.dot > $i.png ; rm -rf $i.dot ; done fi
La sintaxys es la siguiente
michelangelo path_module name_module
Os generara unos graficos en png como los siguientes