Ejemplo de modulo de puppet
Para poder configurar daemons con configuraciones personalizadas deberemos crear modulos de puppet que nos agruparan dicha gestión. Vamos a ver cómo inicializar un modulo y veremos un ejemplo
Mediante puppet module generate podemos crear la estructura de directorios y los ficheros iniciales. Con la opción –skip-interview podemos evitar las preguntas iniciales que deberemos introducir manualmente en el metadata.json:
$ puppet module generate jordiprats-systemadmin --skip-interview Notice: Generating module at /tmp/jordiprats-systemadmin... Notice: Populating templates... Finished; module generated in jordiprats-systemadmin. jordiprats-systemadmin/README.md jordiprats-systemadmin/spec jordiprats-systemadmin/spec/classes jordiprats-systemadmin/spec/classes/init_spec.rb jordiprats-systemadmin/spec/spec_helper.rb jordiprats-systemadmin/Rakefile jordiprats-systemadmin/metadata.json jordiprats-systemadmin/manifests jordiprats-systemadmin/manifests/init.pp jordiprats-systemadmin/tests jordiprats-systemadmin/tests/init.pp jordiprats-systemadmin/Gemfile
Primero editaremos el jordiprats-systemadmin/metadata.json, deberemos modificar el version_requirement de puppetlabs-stdlib a puppetlabs/stdlib y todos los valores que queramos:
{ "name": "jordiprats-systemadmin", "version": "0.1.0", "author": "eyp", "summary": null, "license": "Beerware", "source": "", "project_page": "http://systemadmin.es", "issues_url": null, "dependencies": [ {"version_requirement":">= 1.0.0","name":"puppetlabs/stdlib"} ] }
Modificamos la clase propiamente (jordiprats-systemadmin/manifests/init.pp) dónde realizaremos las acciones, en este caso crearemos un fichero en el /
class systemadmin ($arg="/.systemadmin.es") { file { $arg: ensure => present, owner => "root", group => "root", mode => 0400, content => "mi primero fichero creado con puppet\n", } }
Con el módulo ya preparado, deberemos hacer un build para poder instalarlo:
$ puppet module build jordiprats-systemadmin Notice: Building /home/jordi/jordiprats-systemadmin for release Module built: /home/jordi/jordiprats-systemadmin/pkg/jordiprats-systemadmin-0.1.0.tar.gz
En el servidor de puppet deberemos copiar el build y instalarlo mediante module install:
# puppet module install /home/jordi/jordiprats-systemadmin/pkg/jordiprats-systemadmin-0.1.0.tar.gz Notice: Preparing to install into /etc/puppet/modules ... Notice: Downloading from https://forgeapi.puppetlabs.com ... Notice: Installing -- do not interrupt ... /etc/puppet/modules └─┬ jordiprats-systemadmin (v0.1.0) ├── puppetlabs-concat (v1.2.0) └── puppetlabs-stdlib (v4.5.1)
Simplemente deberemos añadir la clase en la definición del nodo:
node 'ejemplo' { class { 'systemadmin': } }
En el lado cliente, podemos esperar al agente de puppet que lo aplique (si esta instalado) o hacerlo manualmente:
# puppet agent --server=puppet --waitforcert=30 --no-daemonize --verbose --onetime --pluginsync (...)
Una vez aplicado podremos ver que se ha creado el fichero de acuerdo con el modulo que hemos creado:
# cat /.systemadmin.es mi primero fichero creado con puppet
Deja un comentario: