Buscando tratar de desarrollar algo de resistencia en nuestra configuración Ansible que se ocupa del aprovisionamiento y la configuración.
Entiendo algunos métodos de prueba en el lado de la configuración de las cosas, pero me pregunto cuál es la mejor manera de implementar las pruebas en el lado de aprovisionamiento de las cosas, y si hay alguna herramienta que pueda ayudar con este tipo de implementación.
Actualmente, muchas de nuestras pruebas se realizan en serie durante el libro de jugadas, lo que tiene mucho sentido para cosas como "ha surgido el servicio; está disponible el vip; ha finalizado esta tarea asincrónica", pero lo que realmente me preocupa es nuestra capacidad para gestionar la deriva de configuración tanto en la aplicación como en la capa de aprovisionamiento (como la configuración de VM). Sé que Ansible no es la mejor herramienta para trabajar con deriva de configuración, pero tengo curiosidad por ver sus propias opiniones.
Si tiene algo para automatizar completamente el proceso aún mejor. (Tenemos algunos scripts feos que informan diariamente en la holgura).
Nota : En este momento, tenemos algunas condiciones en las que puede ocurrir una reprovisión (por ejemplo, reconstrucción desde una copia de seguridad, un problema crítico del sistema), pero generalmente solo recorre algunas de las tareas de configuración ansibles y no piensa más en ello.
I'm aware Ansible isn't the best tool for working with configuration drift
Por favor explique.Respuestas:
Algunas opciones por ahí ...
Herramientas de prueba: ordenadas por estrellas github
Grandes diferencias entre ellos:
En última instancia, sugeriría pasar un día experimentando con todos ellos para tener una idea de ellos antes de decidir por ti mismo.
Pruebas continuas / de divergencia:
Pruebas de arneses para el desarrollo:
Divulgación completa: soy el autor de goss
ACTUALIZACIÓN: InSpec 4.xo superior utiliza una licencia mixta comercial / de código abierto - ver comentarios.
fuente
Las dos herramientas que he visto para esto son InSpec y ServerSpec . Serverspec es una herramienta basada en Ruby que se basa en RSpec . InSpec está inspirado en RSpec y ServerSpec.
He usado ServerSpec. Es genial, pero tal vez no sea 100% estable. He tenido problemas para probar versiones específicas de software en Ubuntu.
He leído los documentos de InSpec pero no he profundizado. Hace esencialmente lo mismo que Serverspec.
A juzgar por las confirmaciones de Github, parece que el trabajo en ServerSpec ha disminuido un poco, mientras que InSpec se está intensificando.
ACTUALIZACIÓN: InSpec 4.xo superior utiliza una licencia mixta comercial / de código abierto - ver comentarios.
fuente
Al usar herramientas de administración de configuración, como Ansible, la herramienta en sí misma sería responsable de evitar la deriva de la configuración. Una vez que utilizó Ansible para establecer una determinada configuración, la ejecución repetitiva de Ansible garantizará que su configuración sea la que usted definió. Esto también requiere que su código Ansible se escriba de manera idempotente.
Dado lo anterior, se puede lograr el aprovisionamiento de pruebas ejecutando sus libros de jugadas Ansible en un bucle desde algún servidor. Por ejemplo, un trabajo cron, o Jenkins, puede ejecutar los libros de jugadas cada 30 minutos e informar sobre cualquier falla. No tener fallas significa que su configuración está bajo control, tener fallas significa que hay un problema para poner los servidores en el estado deseado .
En un caso en el que no puede confiar en que su código se escribirá como idempotente y, por lo tanto, no puede ejecutar Ansible repetidamente en un bucle desde un servidor automático, existe una solución alternativa. Puede hacer lo mismo que anteriormente (ejecutar Ansible en un bucle) pero usar su modo de ejecución en seco . Cada vez que Ansible informa que se requieren cambios, el trabajo de Jenkins (o el trabajo cron) puede notificarle que su configuración aprovisionada ha sido alterada y que los servidores no están en su estado deseado .
Para asegurarse de que su código Ansible realmente esté haciendo lo que cree que debería estar haciendo, se aplican las soluciones mencionadas por Dave Swersky. Tanto InSpec como Serverspec son herramientas que verifican de manera diferente que tus libros de jugadas realmente hacen lo que quieres decir. Una excelente manera de ejecutar este tipo de herramientas en entornos de prueba (incluso contenedores acoplables) es usar kitchen.ci, que maneja todo el pegamento entre las diversas herramientas de prueba de la unidad infra y la ejecución de sus libros de jugadas / módulos / libros de cocina.
Kitchen.ci se usó originalmente para probar los libros de cocina de Chef, pero también existen complementos para Ansible y otras herramientas CM.
fuente
Test Kitchen tiene un complemento de aprovisionamiento ansible para probar el código Ansible. No es tan profundo como la integración de Chef, pero hace el trabajo en la mayoría de los casos. También está el proyecto más reciente de Molecule, que es un sistema dedicado de prueba Ansible.
fuente
Puede rastrear las discrepancias de configuración / infraestructura / deriva utilizando Outthentic , es fácil crear un conjunto de pruebas para "arreglar" el estado deseado y volver a ejecutarlo cada vez que necesite rastrear cambios no deseados.
fuente