¿Cómo probar el aprovisionamiento y la configuración en Ansible setup?

33

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.

Nafta
fuente
2
serverpec.org
Matt Schuchard
¿Ansible se ejecuta solo una vez tras el aprovisionamiento? Si no, ¿qué frecuencia se está ejecutando? Solo trato de entender el problema antes de ofrecer una solución.
Woodland Hunter
Hola @Naphta, cualquiera de las respuestas ha resuelto tu pregunta. Considera aceptarla haciendo clic en la marca de verificación. Esto indica a la comunidad en general que ha encontrado una solución y le da cierta reputación tanto al respondedor como a usted mismo. No hay obligación de hacer esto.
Richard Slater
I'm aware Ansible isn't the best tool for working with configuration drift Por favor explique.
030

Respuestas:

19

Algunas opciones por ahí ...

Herramientas de prueba: ordenadas por estrellas github

  • Serverspec - Ruby, la herramienta más popular, construida sobre rspec de ruby
  • Goss - YAML, simple, <10MB binario autónomo, extremadamente rápido, puede generar pruebas desde el estado del sistema
  • Inspección : Ruby, considérelo como una especificación de servidor mejorada, casi la misma sintaxis, realizada por los chefs. Creado para ser más fácil de extender que serverpec
  • Testinfra - Python, tiene la característica genial de poder usar el inventario / variables de Ansible

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.

  • Con la excepción de Goss, todos los marcos pueden ejecutarse contra una máquina remota (por ejemplo, sobre ssh). Goss solo se ejecuta localmente o en docker con dgoss.
  • Todos los marcos pueden ejecutarse localmente en un servidor, pero requieren que Python o Ruby estén instalados o incrustados. Inspec proporciona un paquete autónomo de <150 MB con una versión integrada de ruby. Goss es un binario único de <10 MB sin dependencias externas.
  • Goss ha incorporado soporte para salida nagios / sensu, esto permite una integración más fácil con herramientas de monitoreo.
  • Las pruebas de Goss tienden a ser más simples, pero menos flexibles ya que se basan en YAML. Otros marcos le permiten aprovechar toda la potencia del lenguaje subyacente Python / Ruby para escribir pruebas o ampliar la funcionalidad de la herramienta. (simplicidad vs flexibilidad)
  • Goss le permite generar pruebas desde el estado actual del sistema
  • Testinfra, que yo sepa, es el único que cuenta con soporte incorporado para el inventario y las variables.
  • Inspec está respaldado por el chef

Pruebas continuas / de divergencia:

  • Cumplimiento de Chef - trabaja con inspección para probar continuamente sus servidores, producto pagado
  • Goss : se puede conectar fácilmente a Nagios o Sensu. Además, admite exponer las pruebas del servidor como un punto final http.

Pruebas de arneses para el desarrollo:

  • cocina : herramienta de prueba de arnés, lanza instancia, ejecuta el código de administración de configuración, ejecuta el conjunto de pruebas. Hecho por los chicos del chef.
  • Molécula : similar a la cocina de prueba, pero escrita específicamente para ansible

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.

Ahmed Elsabbahy
fuente
44
Entiendo que eres un poco parcial, pero inspec no necesita cumplimiento para ejecutarse periódicamente. Y no hay dependencias que administrar, todas las bibliotecas y el marco necesarios (ruby) se incluyen en el paquete que se puede instalar localmente en cada nodo, cuando se ejecuta a través de ssh / winrm, inspec se implementa. Señala un comando exclusivamente externo que no es cierto, muchas pruebas se realizan mediante código interno de ruby. (Creo que vale la pena ser notado)
Tensibai
He actualizado la respuesta para corregir el comando externo y he incluido Ruby para inspección. ¿Puede aclararme o enviarme un enlace que explique cómo se puede utilizar inspec por sí solo para detectar / informar sobre la deriva?
Ahmed Elsabbahy
Bueno, la parte de los informes estará a su alcance, de hecho, el objetivo de cumplimiento es hacer una representación. Pero puede ejecutar inspec en un crontab y simplemente confiar en el correo crontab cuando hay una prueba que no lo alerta (por ejemplo).
Tensibai
En general, gracias por la edición, que suena una exposición justa de su herramienta y otros. Me temo que esto puede quedar obsoleto rápidamente, pero de todos modos +1 para la lista y los punteros.
Tensibai
Ah, sí ... todas las herramientas se pueden aprovechar de esa manera. Estaba tratando de proporcionar herramientas (o integraciones con herramientas) que brinden mejores informes. Que yo sepa hay conformidad, o envolver las herramientas de una manera que las haga amigables con nagios / sensu / some-other-monitor-tool. Por ejemplo : slideshare.net/m_richardson/… Disculpas si inicialmente fue parcial, no estaba destinado a ser.
Ahmed Elsabbahy
13

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.

Dave Swersky
fuente
1
"He tenido problemas al probar versiones específicas de software en Ubuntu". Lo arreglé después de notar una pregunta al respecto en SO: stackoverflow.com/questions/42417864/…
Matt Schuchard
Para aclarar ligeramente, InSpec emula RSpec pero no se basa en él.
coderanger
1
@MattSchuchard ¡Gracias por esa referencia!
Dave Swersky
"no es 100% estable" para una herramienta de prueba no suena bien
ᴳᵁᴵᴰᴼ
InSpec es muy bueno como herramienta de prueba y facilita la instalación de nada en el servidor, mientras que ServerSpec solo puede hacer esto con un poco de trabajo extra. Sin embargo, se necesitaría algo de trabajo para que InSpec use un inventario de Ansible, probablemente más fácil si el inventario está en formato YAML (Ansible 2.4+).
RichVel
10

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.

Evgeny
fuente
5

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.

coderanger
fuente
0

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.

Alexey Melezhik
fuente
1
Bienvenido a DevOps.se Alexey. Si bien su herramienta puede ayudar al usuario en este caso, para que esta sea una respuesta aquí, debería haber un poco más para transmitir cómo esto es relevante para la pregunta. De lo contrario, parece un anuncio de solo enlace.
pollitos
¡Hola! Claro, acabo de dar más detalles.
Alexey Melezhik
Desde mi punto de vista, esto no hace más que lo que Rundeck puede hacer y está fuera del alcance de esta pregunta. Especialmente porque la respuesta no explica cómo puede resolver la auditoría de un millar de servidores y ser alertado de una deriva o presentar un informe legible para un auditor mediante un resultado analizable. Por lo que acabo de leer, no hace más que lo que inspec puede hacer (por ejemplo) y ofrece menos resultados utilizables a escala mientras requiere muchas herramientas externas para hacer el trabajo y, por lo tanto, es menos portátil.
Tensibai
"cómo puede resolver la auditoría de un millar de servidores" - Podría encontrar algo sobre miles de servidores en la pregunta
Alexey Melezhik
"y ser alertado de una deriva o presentar un informe legible por humanos para un auditor al dar una salida analizable". tampoco encontré esto en la pregunta. La alerta obvia de la deriva es el hecho de que las pruebas comienzan a fallar ...
Alexey Melezhik