Duda sobre diseño

10 views
Skip to first unread message

Jordi Clariana

unread,
Apr 24, 2015, 6:55:59 AM4/24/15
to puppet-user...@googlegroups.com
Hola,

Os comento una duda de diseño que tengo, a ver que soluciones se os ocurren (o ver si coinciden con las mías).

Estoy creando un role que debe instalar distintos profiles dependiendo del entorno (prod o devel).
El role se llama logstash (obvio lo que hace), y si el entorno es devel debería incluir el profile de sudo y rsync.

Mi primera solución era hacer un "subrole":

roles/logstash.pp
roles/logstash/devel.pp

logstash.pp es algo como esto:

classes roles::logstash {
  contain ::profiles::logstash
}

En el devel.pp tener algo así:

classes roles::logstash::devel {
  contain ::roles::logstash
  contain ::profiles::rsync
  contain ::profiles::sudo
}

Esto no me convence del todo. La otra solución sería heredar el role, con lo que devel.pp quedaría así:

classes roles::logstash::devel inherits roles::logstash {
  contain ::profiles::rsync
  contain ::profiles::sudo
}

Y la última solución, poner un *if* en logstash.pp (feo creo yo):

classes roles::logstash {
  contain ::profiles::logstash
  if ($env == 'devel') {
    contain ::profiles::rsync
    contain ::profiles::sudo
  }
}

Otra solución sería crear un role distinto para devel, pero creo que eso es duplicar y penaliza la consistencia.

¿Me dejo alguna posible solución? ¿Con cuál os quedaríais vosotros? La del inherits es la que más me atrae.

Gracias.

Jordi.


Carles Amigó

unread,
Apr 24, 2015, 7:02:16 AM4/24/15
to puppet-user...@googlegroups.com
En mi opinión la herencia de clases en Puppet debe ser evitada siempre excepto en los roles. En este caso simplifica mucho el código y no añade ningún problema...

En mi caso tengo un rol "base" donde instalo todo lo básico de una instancia y del que heredan el resto de roles más específicos que tengo definidos.



--
Has recibido este mensaje porque estás suscrito al grupo "puppet-users-barcelona" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a puppet-users-barc...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a puppet-user...@googlegroups.com.



--
Carles Amigó
fr...@fr3nd.net
http://www.fr3nd.net
Hey dol! merry dol! ring a dong dillo!

Jordi Clariana

unread,
Apr 24, 2015, 7:20:30 AM4/24/15
to puppet-user...@googlegroups.com
Probando el inherits, me he topado con que entonces tengo que crear un hiera para el rol de devel, que básicamente es idéntico al del rol de prod:

$ md5sum hiera/roles/logstash*
f96bba0f4a7a104c27f42a7c0fc1c30d  hiera/roles/logstash::devel.yaml
f96bba0f4a7a104c27f42a7c0fc1c30d  hiera/roles/logstash.yaml

Eso no lo había tenido en cuenta...

Jordi.

Rafael Durán Castañeda

unread,
Apr 26, 2015, 12:13:44 PM4/26/15
to puppet-user...@googlegroups.com
Hola,

+1 herencia y el problema de Hiera lo puedes solucionar fácilmente jugando con la jerarquía, de forma que, por ejemplo, dependa del entorno. Untested:

---
:backends: yaml
:yaml:
  :datadir: /var/lib/hiera
:hierarchy:
  - "role/%{role}"
  - "role/%{role}::%{environment}"
  - common
:logger: console

De esta forma deberías poder factorizar los valores que sean comunes entre entornos y los que sean específicos.

Saludos

Jordi Clariana

unread,
Apr 26, 2015, 1:23:13 PM4/26/15
to puppet-user...@googlegroups.com
Sí, al final usé herencia (para mi la forma más elegante) y solucioné lo de hiera con una fórmula similar a la que sugieres.

Gracias!

Jordi Clariana
Reply all
Reply to author
Forward
0 new messages