La odisea de los problemas concatenados

Colaboración de PowerP0tat0.

En las ciencias de la computación una de las formas de manejar la complejidad es el uso de capas de abstracción, lo que permite enfocarnos en el problema de turno sin necesidad de tener que ahondar en cuestiones no relevantes para el mismo. Por ejemplo, se puede desarrollar una aplicación con la capacidad de tomar fotos sin tener siquiera idea de qué es un sensor óptico, podemos desarrollar una calculadora hasta científica sin tener idea de cuales son los algoritmos numéricos necesarios para los cálculos ni cómo se ejecutan estos en los procesadores. Probablemente escribir una calculadora dejaría de ser un proyecto básico en buena parte de los cursos introductorios a la programación si fuera necesario implementarla en ensamblador.

Resulta que el desarrollo de aplicaciones es también complicado, involucrando muchas personas tratando de crear algo armonizadamente, cuando guerras campales han azolado el mundo de la computación por cosas tan “importantes” como escoger entre emacs vs vi o si el sangrado del código será con espacios vs tabulador . Para gestionar la complejidad de estos proyectos se han creado capas de abstracción y marcos de trabajo que en los últimos años son cada vez más exóticos y solo el tiempo y la cantidad proyectos exitosos dirán si sobreviven. El problema de estas capas y marcos es que cada una añade un poco de ineficiencia y encontrar un problema dependiente de una de las capas inferiores puede ser extremadamente frustrante.

Programar no es estresante
Mi equipo es muy moderno y “agile, por eso decidimos utilizar microfrontends, docker, kubernetes, scrum, microservicios y un amplio etc. de tecnologías integradas entre sí. Muy lejos han quedado aquellos días donde preparar el entorno de desarrollo era instalar el IDE preferido, éramos felices y no lo sabíamos.

Mentalidad ágil
Mentalidad ágil

Nos surgió un día que nuestro flamante, bien implementado, bien testeado, y con buenas prácticas implementado microfrontend (para abreviar FBIBTBPIM, que se note lo de bien implementado) dejó de mostrarse en el Contenedor de microfrontend, desarrollado por otro equipo. Entonces me dí a la tarea de encontrar el blasfemo problema que había mancillado la pureza y belleza de nuestra obra FBIBTBPIM. Para esto primeramente decidí entrar al entorno protegido donde se ejecuta nuestra aplicación, al que solo se puede acceder mediante una interfaz de escritorio virtual, gozosa de todas las cosas que la caracterizan, como los recursos limitados, la lentitud y la carencia de cualquier herramienta necesaria para realizar el trabajo de desarrollo de software. Entro a mi escritorio virtual y accedo al contenedor, pongo mis credenciales y que sorpresa me he llevado al darme cuenta de que las credenciales solicitadas hacía varios meses no habían sido habilitadas, por lo que no podía acceder a mi hermoso FBIBTBPIM.

No desesperé, pregunté a uno de mis colegas, que sí tenía permisos para ver a FBIBTBPIM, lo revisara. Accedió y en efecto, no funcionaba, siempre es importante comprobar dos veces, por si se arregla solo. Cualquier principiante poco experimentado hubiese entrado en pánico directamente, pero yo, un veterano de mil batallas con estas cosas donde cada una ha dejado una marca blanca en mi pelaje dejando una capa plateada de gloria sobre mi cabeza, no desesperé. Pues hice gala de mi súper destreza y le dije que lo intentara nuevamente, por si a la tercera iba la vencida, pfffff, nada, que es lo que se supone ocurra cuando esperas que el problema se solucione mágicamente.

Bugs en todas partes
Bugs en todas partes

Seguí manteniendo esa calma y estoicismo que me caracterizan y le pedí a mi colega que revisara la consola del navegador web (generalmente disponible usando la tecla F12), de seguro arrojaría información esclarecedora al asunto, pffffff, nada de nada, la consola mostraba en todo su esplendor su nula información, sin letras que mancillaron su figura. Esto me hizo pasar a la acción, y ni corto ni perezoso en mi conciencia aparecieron vivencias de batallas anteriores con problemas similares.

Pensé que las rutas estaban mal, por eso no mostraba nada y seguía funcionando, luego, seguro alguna dependencia no era compatible, luego que si las configuraciones del entorno estaban mal, todo esto degeneró en una serie de cambios a ciegas. La idea era abarcar el mayor espectro de soluciones, ya que para poder probar la integración entre el contenedor de microfrontend y FBIBTBPIM tenía dos opciones, una, desplegar y esperar a que todo esto se hubiese arreglado y la otra era simular de manera local la integración para poder hacer cambios y probarlos de manera elegante y eficiente. La primera opción estaba descartada de nacimiento porque era impura, mediocre, no digna de mis extensas habilidades y experiencia, además de las dificultades de tratar con los DevOps, criaturas coléricas, en extremo celosas de la calidad de sus pipelines y cantidad de despliegue en sus dockers y Kubernetes y con una fiera aberración a los colores rojos en las interfaces.

Me dispuse a hacer el despliegue en local, todo lleno de felicidad y armonía, el primer problema era que necesitaba hacer esto en la interfaz de escritorio virtual, porque el contenedor de microfrontend requería accesos a la red protegida así como a los repositorios privados de librerías. El primer paso era clonar el repo del contenedor, que no fue coser y cantar, ya que necesitaba configurar el acceso a través de SSH a nuestro servidor de Git porque la seguridad es lo primero. Al escribir el sencillo y elegante comando de clonado me percato que el escritorio virtual no tenía git. Visto esto, hago la solicitud para que se instale en la máquina virtual, hay que llenar una plantilla para solicitarlo, esperar revisión, esperar aprobación y esperar instalación, de paso pedí el Node que también faltaba y lo dejé para el día siguiente, de seguro al equipo de soporte le daba tiempo de sobra para instalarme estas cosas. Pues no, ignorado olímpicamente pedí ayuda a otro colega que sí disponía de esas herramientas.

Logramos clonar el repositorio en tiempo récord, pocas veces ha demorado tanto, luego pusimos el grácil comando de instalación de dependencias el cual después de varios minutos jugueteando con la red decidió informarnos de que estábamos detrás de un proxy http (para que nadie oculte nada) y no se podía descargar una dependencia que quería ocultarse tras el manto del SSL. A este punto cualquiera hubiese convulsionado hasta la muerte, yo no, gracias a mi pericia hicimos un puente a los paquetes que requerían acceso desde la red privada y protegida e instalamos las dependencias propias de la red pública desde mi local, comprimimos todo (node_modules incluido) y lo mandamos al escritorio virtual, “Error en webpack“, recurrí nuevamente al local, limpié mi package-lock, borré node_modules (vamos ya por horas) instalé nuevamente, comprimí, se la envié a través del chat a mi colega, este descomprimió, ejecutó serve y una lágrima de felicidad recorrió su mejilla al ver que salía el contenedor de microfrontends, mi mejilla limpia, ya que no me sorprenden esas cosas, es lo que se supone que pase cuando mi destreza está implicada.

Todo era felicidad hasta que mi colega chocó con qué el contenedor requería credenciales, credenciales que no teníamos. No sucumbí a la desesperación, rápidamente llamé al colega anterior, al que tenía permisos (dejando de lado el hecho de que tenía que haber pasado por todas estas tribulaciones con él desde el principio) le dí todo empaquetado, le dio a “serve”, metió las credenciales y entró. Le pido que revise la lista de microfrontends, para a partir de allí agregar el nuestro, nos percatamos que no estaba funcionando correctamente, y que lanzaba 14 errores indescriptibles e ineludibles.

A este punto desesperé, me di cuenta de lo poco factible que era la situación, era el tercer día de trabajo en este problema, el sufrimiento me podía y mi cráneo parecía estar comprimiendo la hinchazón de mi cerebro lanzando punzadas de dolor. La vista se me nublaba a ratos, y con hiel en la garganta le pedí al DevOps que desplegara la aplicación. Este, todo chulo, me responde que “a qué tanto apuro”, y que si estaba seguro de que iba a funcionar, para no desplegar por gusto, le expliqué de manera resumida mi desdicha, logré arrancar gotas de piedad de la dura roca que tenía por corazón, y haciendo él un gran sacrificio presionó el botón de desplegar.

Una hora después (los dockers y kubernetes de despliegue son conocidos por su alto rendimiento) ya estaba desplegado el proyecto. En este punto no quedaba nadie trabajando, solo otro chiflado que estaba enredado en sus propias torturas, le pregunto al chiflado que si tenía permisos para revisar en el contenedor de microfrontends el FBIBTBPIM. Me dice que sí, me pareció un presagio de que la suerte me empezaba a sonreír. El chiflado entra en el escritorio virtual, entra en el contenedor y todo en blanco, claro, no pasa nada, solo es la versión que no coincide, solo hay que meterse en configuraciones y poner la versión correcta para que cargue mi hermoso FBIBTBPIM, es que hay que seguir el versionado, es buena práctica y es muy útil, de esta forma sabes que versión era buena y cual no, le dije, a lo que me respondió desde lo poco que le quedaba de conciencia que él no tenía permiso para modificar las configuraciones. Con un riesgo cada vez mayor de perder algún tornillo importante, lo dejo hasta el otro día.

Al día siguiente y con la ayuda de la única alma con permisos para arreglar la versión, funcionó. Después de cuatro días y cinco personas compartiendo mis miserias el FBIBTBPIM finalmente funcionó.

Moraleja, no se las den de navajas suizas, si no pueden hacer algo, no lo hagan hasta que los que tienen que garantizar las condiciones que permitan hacerlo hagan su trabajo. Confíen en sus DevOps, también son humanos y deben velar por el correcto funcionamiento de sus despliegues.

Comentarios