Jugando con pytest, testinfra, etc ...

14 views
Skip to first unread message

Israel Santana Alemán

unread,
May 13, 2020, 6:12:37 AM5/13/20
to laspalma...@googlegroups.com
Buenas,

Últimamente estoy trabajando bastante estas tecnologías, y aunque están bien, hay cosillas que no terminan de convencerme. 

Mi uso, ahora mismo es en testing de contenedores y ansible (mediante molecule). Como todo en esta vida, cuando hablas con gente, puedes ver otros puntos de vista e intercambiar experiencias.

¿ Hay mucha gente usándolas por aquí ? Estaría bien montar algún tipo de reunión virtual para hablar de estos temas.  ¿ Qué opinan ?


--
Sin más, un saludo

Israel Santana (aka kamaxeon)

Pablo Montesdeoca Pérez

unread,
May 13, 2020, 6:21:24 AM5/13/20
to laspalma...@googlegroups.com
Hola Israel:

Yo estoy empezando con Molecule para Ansible y me gusta, aunque mi experiencia es muy limitada. Me interesaría saber qué limitaciones son las que encuentras más frustrantes.

Por otro lado, lo poco que sé de PyTest me lo has enseñado tú, así que en poco te puedo ayudar.

Saludos,

--
Política de envíos de la lista:
 
Sólo se permiten subscriptores con una dirección de correo personal, direcciones genéricas tales como in...@miempresa.com, miem...@miempresa.com ... no serán admitidas como direcciones válidas.
 
Cualquier anuncio que suponga la promoción directa de productos conllevará la expulsión de la lista, cualquier persona puede opinar libremente sobre su experiencia de cualquier producto, pero nunca ofertar o publicitar productos de forma genérica.
---
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas DevOps" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a laspalmas-devo...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/laspalmas-devops/CAGhZyo_eDtO5U96erjOWAuR2dx2%3DRXDjry9d%3D--ozmECh%2B-n1w%40mail.gmail.com.

Eduardo Suarez-Santana

unread,
May 13, 2020, 6:24:23 AM5/13/20
to laspalma...@googlegroups.com
Estoy bastante interesado. Llevamos algo de tiempo trabajando con molecule, pero aún no lo tenemos con CI.

De hecho estaba buscando una solución para monitorización que incluyera también algo de selenium y nagios (testinfra viene preparada para nagios).

De momento estamos probando incluso para uso personal con pytest, usando https://github.com/borisbabic/browser_cookie3, y publicando en https://reportportal.io/.

--

Juanje Ojeda Croissier

unread,
May 13, 2020, 9:31:03 AM5/13/20
to laspalma...@googlegroups.com
También estoy interesado. He estado trasteando últimamente con Ansible + Molecule + Pytest + TestInfra. Me gusta bastante y me gustaría seguir dándole caña.
Por cierto, luego, a las 16:00 hay una charla en directo sobre Ansible + Molecule + Github Actions, por si les interesa ;-)
https://www.youtube.com/watch?v=CYghlf-6Opc

Gracias, Eduardo, por las cosas que has pasado, no las conocía y tienen buena pinta :-)




--

Juanje Ojeda Croissier

unread,
May 13, 2020, 9:48:51 AM5/13/20
to laspalma...@googlegroups.com
Por cierto, otra framework que he probado para hacer pruebas con molecule es inspec[1]. Lo malo que tiene (y por lo que terminé usando Testinfra) es que el módulo de molecule no está muy allá y la salida de los resultados es fea y muy «verbose», pero es mucho más potente (muchos más resources[2]) que Testinfra u otros frameworks similares.
Lo otro bueno, o malo, según a quién le preguntes, es que es Ruby en vez de Python y que usa sintaxis Rspec.

No viene directamente integrado con molecule, pero no cuesta mucho añadir el módulo y ponerlo a funcionar.

--

Israel Santana Alemán

unread,
May 14, 2020, 6:11:20 PM5/14/20
to laspalma...@googlegroups.com
Buenas,

Guay que hay interés, podemos intentar cuadrar algo la semana que viene alguna tarde. Mola ver gente que hace cosas parecidas.

Pablo, con respecto a las limitaciones, es que no es tan potente la forma de configurar contenedores si has usado docker-compose. 

El otro día por ejemplo, me ví en un caso donde tenía que conectar dos contenedores. Pensé que sería como docker compose que lo hace automáticamente. Ví que no, pensé, bueno igual es que está en la red default de docker que no puedes usar nombres, y sólo lo haces mediante ip. 

Dije pues bueno vale, les creo una red y pensé que ya me escribiría el /etc/hosts automáticamente. Lo hago y nada, no lo hace .... :-(  Veo una opción de inyectar registros en el /etc/hosts (etc_hosts) de los contenedores, le puedo especificar una ip. Lo hago, pero no me funciona, porque no hay forma de definir el rango de la una red con el yaml de driver docker (https://molecule.readthedocs.io/en/latest/configuration.html#docker) en molecule, reviso el código https://github.com/ansible-community/molecule/blob/master/molecule/provisioner/ansible/playbooks/docker/create.yml#L93 y veo que usan el recurso de ansible para crear redes en docker (https://docs.ansible.com/ansible/latest/modules/docker_network_module.html) y compruebo que tiene la parte de ipam_config y me permitiría definir el cidr de la red, pero que no está implementado en molecule.

Ya estaba, bastante calentito y pensando el escribir para intentar colaborar y hacer un PR, por suerte ya existe una y espero que lo acepten rápido (https://github.com/ansible-community/molecule/pull/2696)

Para hacerlo funcionar correctamente he tenido que crear una dependencia como shell para lanzar un playbook de ansible para que cree la red con el cidr, y modificar la secuencia por defecto de test para que lo haga correctamente.

He tenido que dar un rodeo brutal para una cosa que en docker-compose es automático. Igual es por mi ignorancia y hay una forma de hacerlo más fácil, pero no encontré la forma.

Otra cosa que por ejemplo no ví en el driver de docker, es poder pasarle un entrypoint, la verdad no me apetece escribir un Dockerfile para modificar un simple entrypoint ni estar conociendo donde se encuentra para montarle como un volumen mi entrypoint particular. De nuevo vas a la misma página de antes (https://github.com/ansible-community/molecule/blob/master/molecule/provisioner/ansible/playbooks/docker/create.yml#L117) y comprueba que usa el módulo de ansible para levantar un contenedor, que por supuesto tiene la opción del entrypoint, pero no la han implementado (https://docs.ansible.com/ansible/latest/modules/docker_container_module.html)

Esto no quita que el proyecto de molecule esté bastante bien, pero hay algunas cosillas con las que me encuentro que me ponen un poco de los nervios.

Y estoy de acuerdo con Juanje, inspec en cuando a módulos barre a testinfra, pero por ahora como uso casi todo en python sigo usando testinfra, aunque cada vez miro con ojos más golosones a inspec.

Un saludo,

Juanje Ojeda Croissier

unread,
May 16, 2020, 9:57:21 AM5/16/20
to laspalma...@googlegroups.com
Buenas :-)

La documentación de Molecule no parece ser lo mejor que tiene, pero el código no es muy grande y algunas cosas sí están bien documentadas ahí.
Mirando el caso que comentabas, me daba la impresión de que sí se podía hacer sin tanta complicación. Que, aunque la doc no lo dejara claro, sí se podía.

Una cosa que tiendo a hacer en los docker-compose (desde la versión 3) es tratar de evitar las configuraciones de red. En la inmensa mayoría de los casos es mejor definir un nombre de red y que docker se maneje solo. Me he encontrado muchas configuraciones de rangos de IP a mano y cosas así y suelen ser un problema para mantener y totalmente innecesarias.
Viendo esto, decidí probar el mismo enfoque, miré a ver si se podía definir la red en el archivo 'molecule.yml' en el apartado 'platforms' y sí se puede.

Pongo aquí el ejemplo que hice (dejé solo la parte importante):

---
driver:
  name: docker
platforms:
  - name: instance1
    image: docker.io/pycontribs/centos:7
    pre_build_image: true
    networks:
      - name: fakenet
  - name: instance2
    image: docker.io/pycontribs/centos:7
    pre_build_image: true
    networks:
      - name: fakenet

Esto me crea una red 'fakenet' y mete a los dos contenedores en ella.

Ahora puedo crear las instancias con 'molecule create' y luego entrar en una:
$ molecule login -h instance1
[root@instance1 /]#

Y hago un ping a la otra:
[root@instance1 /]# ping instance2
PING instance2 (172.20.0.3) 56(84) bytes of data.
64 bytes from instance2.fakenet (172.20.0.3): icmp_seq=1 ttl=64 time=0.174 ms
64 bytes from instance2.fakenet (172.20.0.3): icmp_seq=2 ttl=64 time=0.088 ms
^C


Con esto ya deberías poder ver ambos hosts desde los playbooks y desde los tests. No sé si te falla alguna otra cosa.
Algo que sí probé y me falló es que añadirle la propiedad 'hosname' a cada instancia. Es decir, eso funciona bien, pero luego no puedes hacer ping a la otra porque sí que no te lo añade al '/etc/hosts'. Quizás era eso lo que estabas intentando y te fallaba, acceder vía hostname, en vez de por nombre de instancia.
Por lo que entiendo, el nombre de la instancia es el equivalente al nombre del 'servicio' en el docker-compose, que es lo que realmente llamarías desde otro contenedor si usas docker-compose.

Ah, otra cosa que probé es hace el login y el ping sin haber añadido la propiedad de 'networks' y también falla. Así que la clave está en definir la misma red para cada instancia que quieres que se vea.

¿Te ayuda esto? ¿Iban por ahí los tiros?

Por cierto, me apunto a una sesión de molecule/testinfra/pytest, etc. Aunque casi que prefiero en fin de semana, que entre semana suelo ir más justo de tiempo y con ganas de desconectar de la pantalla :-P
Un saludo.




--

Eduardo Suarez-Santana

unread,
May 19, 2020, 9:07:35 AM5/19/20
to laspalma...@googlegroups.com
Si finalmente hacemos algo (entiendo que sería algo como una vídeo para comentar cada uno sus ideas y casos de uso, e intercambiar opiniones), comentar que sólo tendría disponibilidad de lunes a miércoles, en ese caso con flexibilidad horaria.

Saludos.

Israel Santana Alemán

unread,
May 20, 2020, 3:19:12 AM5/20/20
to laspalma...@googlegroups.com
Buenas,

Juanje dice fin de semana, Eduardo de lunes a miércoles, Pablo ???

Un saludo

Pablo Montesdeoca Pérez

unread,
May 20, 2020, 6:43:10 AM5/20/20
to laspalma...@googlegroups.com
Hola:

Yo tengo disponibilidad de lunes a viernes a partir de las 17h, y los fines de semana en cualquier momento (más o menos).

Saludos,

Oliver Gutiérrez

unread,
May 20, 2020, 7:10:49 AM5/20/20
to laspalma...@googlegroups.com
Yo ando un poco verde con todo esto, pero si me cuadra el horario y lo hacen por videoconferencia me uno aunque sea para "golisniar" y verles los caretos.

Evidentemente, si puedo aportar cualquier cosa lo haré :)

Israel Santana Alemán

unread,
Jun 22, 2020, 6:26:22 AM6/22/20
to laspalma...@googlegroups.com, Juan Jesús Ojeda Croissier
Buenas, 

Que nos hemos dispersado un poco, creo que @Juan Jesús Ojeda Croissier tiene más libertad ahora entre semana.

Lo movemos para una tarde de la semana que viene ??

Un saludo,

Juanje Ojeda Croissier

unread,
Jun 22, 2020, 6:59:39 AM6/22/20
to laspalma...@googlegroups.com
Por mí, perfecto. Como bien dices, ahora no tengo problemas para quedar entre semana. Creo que de lunes a miércoles le venía mejor a la mayoría.

Un saludo.
--

Eduardo Suarez-Santana

unread,
Jun 24, 2020, 5:44:33 AM6/24/20
to laspalma...@googlegroups.com
Por mí ok en principio.

Reply all
Reply to author
Forward
0 new messages