2012-07-04 17 views
6

Estoy experimentando con scripts Puppet para la implementación.¿Realmente no hay una manera fácil de probar scripts de títeres en una máquina remota?

Encuentro que la parte más difícil del proceso de escritura de esos scripts es la prueba iterativa de ellos.

No quiero puppet apply en mi máquina de desarrollo local, que puede estropear cosas. Tengo una caja remota de pizarra limpia donde quiero aplicar. Tampoco veo cómo un titiritero puede ayudarme; Puede que esté usando un titiritero en un punto posterior para implementaciones de producción, pero por ahora, solo quiero que mi código funcione.

Así que armé un guión de shell rápido que sincronizaría los diferentes directorios de mi ruta de módulo local de marionetas a/tmp en la máquina remota, y luego ejecutaría puppet apply. Esto es terriblemente inconveniente. Es lento, especialmente si estamos hablando de un error de sintaxis.

Creo que lo que quiero realmente es algo así como un titiritero < -> conexión puppetmaster, donde puppetd en la máquina remota recibe un manifiesto ya compilado. Sólo un adhoc-one sobre una conexión SSH, sin tener que configurar realmente un Puppetmaster, que trata de certificados, etc. puppet apply [email protected].

Parece que no hay nada por el estilo, pero ¿cómo lo hacen otras personas con esto? La experiencia de trabajar en un guion de Marioneta es increíblemente frustrante para mí, tal como es.

+2

Parece ser que no entiende bien que comenzar un daemon titiritero es difícil, ya que todo lo que usted describe apunta simplemente al uso de un titiritero. La mayoría de las distribuciones tienen un paquete tipo títere-servidor, lo instala, los certificados no son una molestia; solo los firma una vez. A continuación, puede volver a ejecutar el agente puppetd/puppet en el cliente o usar títeres kick para hacerlo de forma remota. Pruébalo, digo. –

+1

Otras sugerencias son usar tanto para '' puppet parser validate'' (o 'puppet --parseonly' en versiones muy antiguas) para encontrar errores de sintaxis, títere-lint para encontrar otros problemas de nivel superior y considerar escribir pruebas para sus manifiestos. ver [Verificación de Puppet: comprobación de la sintaxis y escritura de pruebas automatizadas] (http://puppetlabs.com/blog/verifying-puppet-checking-syntax-and-writing-automated-tests/) –

+3

¿Ha intentado ejecutar 'puppet --noop --test', que efectivamente realiza un recorrido en seco en una máquina? Si bien la naturaleza de los scripts puede provocar que ciertas condiciones que son interdependientes fallen en ciertos casos extremos (por ejemplo, usar heurística basada en contenido, resultados de ejecutivos, etc.), debe proporcionarle una visión significativa de cómo se ejecutará el script.Encuentro este método muy útil para experimentar con cambios manifiestos en los que los recursos están relacionados: Puppet no tiene un orden de ejecución fijo sin restricciones de recursos extremadamente ajustadas, cada ejecución en seco puede producir un orden diferente. – plasmid87

Respuesta

9

Recomendaría usar Vagrant. Si no está probando la configuración de puppet master, puede usar el built in provisioner integration.

Una vez que haya configurado todo, puede ejecutar disposición de vagabundo o simplemente ejecutar la aplicación de títeres en el vagabundo vm.

Here's un artículo relacionado puede encontrar útil también.

0

Me encontré con rump mientras miraba another question. Si usas git, puede ser útil. Hay a slide deck disponible.

del archivo README.md: "Rump lo ayuda a ejecutar localmente Puppet contra un proceso de pago de Git".

+0

Aunque no está escrito en el archivo README, podría ser un acrónimo de RUn Masterless Puppet. – MarkHu

3

También me gustaría echar un vistazo a las pruebas de Puppy rpsec, usando rspec-puppet y puppetlabs-spec-helper. El rspec-puppet-init romperá marionetas doc y geppetto y tal vez algunas otras cosas debido a los enlaces simbólicos, y hay algunos issues with hiera, pero las pruebas son fáciles de configurar de otra manera y funcionan bien, y también pueden vincularse a jenkins/hudson.

2

Normalmente tengo dos niveles de prueba para mis scripts de Puppet.

pruebas unitarias para una rápida retroalimentación: Escrito utilizando rspec-puppet, éstos compilar un catálogo de marionetas para la clase/definir/etc que se está probando, y hacer afirmaciones al respecto. Ejecutar localmente cada vez que hago un cambio menor, y en el servidor de compilación cada vez que ingreso. Las pruebas se ejecutan rápidamente (< 10 segundos) y recogen problemas de sintaxis y dependencia.

pruebas funcionales para asegurarse de que realmente funciona: Escrito utilizando Cucumber con la biblioteca Aruba.Cuando termino de implementar una característica y la unidad prueba que pase, estas pruebas proveen una VM (usando Vagrant) con los manifiestos de Puppet apropiados, inician sesión y hacen afirmaciones sobre el estado de la VM. Las pruebas se parecen a las siguientes:

Given I am SSHed into Vagrant box "webserver" 
When I type "php --version" 
Then the output should include "PHP 5.4.11" 
1

Vagrant es el entorno más útil para el desarrollo rápido de la infraestructura que he encontrado. Lo más cerca (99%) reflejará su configuración de producción, y puede dar cuenta de esas pequeñas diferencias en la marioneta para que todo funcione como se espera. Se tarda unos 30 minutos en ejecutarlo y se lo devolverá varias veces en el tiempo ahorrado al jugar con scripts de copia de archivos :)

Si es útil visualizar, en mi escritorio tengo 3 terminales una al lado de la otra:

Terminal 1) manifiesta Edición de títeres, clases, código ruby, etc Terminal 2) Running 'prestación vagabundo', que simplemente se aplica un títere junto con los hechos que desea pasar, etc. Terminal 3) 'ssh vagabundo 'en la caja para que pueda hurgar como marioneta está haciendo su trabajo

Espero que esto ayude!

0

¿Por qué no quieres ejecutar un titiritero? Fue creado exactamente para esta situación.

Si no puede ejecutar un titiritero, deberá envolver las llamadas de marionetas en otro script que primero descargue el archivo (con curl o wget) y aplicarlo después de una descarga exitosa. Dado que el Puppetmaster es una aplicación bastante simple para ejecutar, no veo cómo no sería mejor usarlo.

0

Puede que le interese citac, un kit de herramientas para realizar pruebas automáticas de scripts de Puppet. Está disponible en Github: https://github.com/citac/citac

Citac ejecuta sistemáticamente su manifiesto Puppet en varias configuraciones, imitando fallas transitorias del sistema, diferentes órdenes de ejecución de recursos, y más. Los informes de prueba generados le informan sobre problemas con recursos no ideopotentes, problemas relacionados con la convergencia, etc.

La herramienta utiliza contenedores Docker para su ejecución, por lo que su sistema permanece intacto durante las pruebas. Los cambios de estado se rastrean durante la ejecución del script de Puppet, y se generan informes de prueba detallados.

Para tener una idea de los errores que la herramienta puede detectar, se realizó una evaluación a gran escala con más de 150 scripts de Puppet públicos. Los resultados están disponibles aquí: http://citac.github.io/eval/ Por favor, siéntase libre de proporcionar comentarios, solicitudes de extracción, etc. ¡Pruebas felices!

Cuestiones relacionadas