systemadmin.es > Gestión de cofiguración > Ejemplo de modulo de puppet

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:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>