Pruébame si puedes. ¿Los desarrolladores de YML sueñan con probar ansible?

esquema de cocina-ci


Es la versión de texto de la presentación 2018-04-25 en Saint-Petersburg Linux User Group . El ejemplo de configuración se encuentra en https://github.com/ultral/ansible-role-testing


Supongo que haces la gestión de la configuración, no bash . Significa que tienes que probarlo de alguna manera. ¿Alguna vez has probado roles ansibles? Como lo haces


Como hacerlo


En mi caso, tenemos:


  • Un montón de diferentes roles ansibles.
  • Hyper-V aloja como hipervisor.
  • Una nube privada con posibilidades limitadas para crear máquinas virtuales a pedido.
  • Un proxy para el acceso a internet.
  • Incapacidad para probar los roles ansibles dentro de la ventana acoplable, debido a un rol = configuración de VM completa.
  • Decisión de implementar una política de compilación verde para el repositorio de git con roles ansibles.

Comparemos las soluciones existentes para las pruebas.


NombreCocina de pruebaMoléculaCrear nuevo
Idiomarubípitónbash / ruby
Vigilantes1321260 0
Estrellas141311541
Tenedores5021742
LicenciaApache 2.0MITCualquier
Se compromete192912640 0
Lanzamientos1011210 0
Colaboradores109825 5

NombretestinfraserverpecinspecGoss
Githubphilpep / testinframizzy / serverpecchef / inspecaelsabbahy / goss
Idiomapitónrubírubíir
Vigilantes9314516567
Estrellas997210511672170
Tenedores138361330156
LicenciaApache 2.0MITApache 2.0Apache 2.0
Se compromete38018544609309
Lanzamientos3528234647
Colaboradores4311015931

Decidimos no reinventar la rueda y obtener una solución lista para la producción. Nuestro equipo de infraestructura tenía fuertes habilidades en ruby ​​y una gran experiencia con ruby, como resultado elegimos Test Kitchen & inspec


Cocina-ci


esquema de cocina-ci


La idea principal es crear una nueva máquina virtual, aplicar un rol sensible y hacer algunas pruebas de humo.


Política de construcción verde


Esquema de política de compilación verde


Además, implementamos una política de construcción ecológica. Ejecutamos pruebas para cada confirmación en la rama maestra y, si las pruebas están bien, cuando se aplican roles ansibles.


Virtualización anidada


Como recordará, teníamos una nube privada con posibilidades limitadas de crear máquinas virtuales a pedido. Decidimos crear máquinas virtuales dentro de máquinas virtuales.


necesitamos ir más profundo


En primer lugar, intentamos ejecutar Virtualbox x32 sin anidar. Fue una mala idea debido al pánico del grano. También la gran mayoría de nuestras máquinas virtuales en nuestra infraestructura son x86_64, por lo que decidimos continuar la investigación. Como resultado, decidimos usar la virtualización anidada. Esperemos que sea compatible con nuestros servidores host.


Problemas enfrentados


Estaba implementando testkitchen y me enfrenté a algunos problemas.


Pase la configuración del proxy del host a la máquina virtual invitada de testkitchen


En algunos trajes de prueba, configuramos la configuración del cliente proxy dentro de la VM creada por testkitchen. Sin embargo, el proxy no se configuró en el host testkitchen y ansible no puede usar variables adicionales con valores vacíos


Solución: cree una plantilla erb para configurar el proxy predeterminado si no se configuran las variables ENV


<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %> 

Administra la configuración de red a través del libro de jugadas


Algunos roles configuran las interfaces de red. El traje de prueba se parecía a:


  • Implemente la configuración de red en máquinas virtuales
  • Recargar red
  • Ha fallado

Solución: agregue interfaces a las máquinas virtuales


Falla si las maletas contienen "-" en el nombre


Virtualbox no puede usar "_" en un nombre de VM


Solución: cambie el nombre de las maletas "vm_" => "vm-"


La prueba de Oracle falla sin "." al final del nombre de VM


Usamos el papel en la producción, sin embargo, cuando decidimos probarlo, falló. Nosotros lo reproducimos.


Me gustaría mostrar una pista.


 [root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW 

¿Tienes alguna idea de lo que está pasando?


Es un error complicado:


  1. habilitamos escuchar IPv4 solo en la configuración de Oracle oyente
  2. Oracle utilizó FQDN
  3. Linux contiene una base de datos especial "myhostname" para resolver el nombre de host, se usa después de / etc / hosts & dns resolving
  4. Vagrant creó VM y actualizó /etc/hosts

Me gustaría aclararlo un poco más:
¿Qué ha sucedido en caso de que vm-oracle ?


  1. vm creado vagabundo
  2. vagabundo actualizado /etc/hosts ( vm-oracle x2)
  3. oracle oyente escuchó IPv4
  4. Los oyentes oracle resolvieron vm-oracle. y IPv6 geted
  5. Falló

Lo que ha sucedido en el caso de vm-oracle. ?


  1. vm creado vagabundo
  2. vagabundo actualizado / etc / hosts ( vm-oracle y vm-oracle ) .
  3. oracle oyente escuchó IPv4
  4. Los oyentes oracle resolvieron vm-oracle. y IPv4 geted
  5. Ok

OOM viene


OOM al azar estaba matando máquinas virtuales. Testkitchen fue fallado con errores extraños.


Solución: aumentar la RAM


Construcciones lentas


Estaba trabajando lentamente


Soluciones:


  • Packer Caja vagabunda preconstruida con tareas comunes
  • Concurrencia

Conclusión


Por un lado, la implementación actual funciona, pero por otro lado, hay algunos problemas


  • No es fácil de usar.
  • mezclamos ruby ​​y python.
  • No hay verificación de indepotencia.
  • Funciona lento.
  • Es difícil rastrear registros en un solo trabajo.

Como resultado, la molécula y el acoplador pueden ser una solución bastante interesante.


Algunos enlaces relacionados


Source: https://habr.com/ru/post/436960/


All Articles