Contenidos
Módulos cuando te espero
Wait_for ansible
En situaciones como esta es útil saber que para los módulos Terraform cada variable de entrada y valor de salida puede tener su propio conjunto de dependencias. En particular, puedes usar dependencias explícitas en tus valores de salida para encapsular los detalles de la implementación de manera que los módulos que llaman no necesiten conocerlos.
No mencionaste aquí cuál es el propósito de esperar 10 minutos en tu caso, así que voy a asumir que es porque hay algún proceso asíncrono que debe completarse antes de que algún otro objeto que hayas declarado sea completamente utilizable. En ese caso, normalmente sugeriría identificar otro de tus valores de salida que exporte la información necesaria para usar ese objeto, y anotar ese valor de salida con la dependencia adicional.
Voy a inventar una situación para dar un ejemplo. Si estás desplegando una instancia de AWS EC2 que sirve alguna API que tarda varios minutos en estar disponible una vez que la instancia de EC2 se inicia, entonces probablemente ya tendrías un valor de salida que exporta la URL de esa API, tal vez así:
Ejemplos de ansible wait_for
Hay un módulo para desplegar una aplicación frontend, otro para desplegar una aplicación backend, otro para la base de datos MySQL, y así sucesivamente. Para desplegar un entorno así, tendrías que ejecutar manualmente terraform apply en cada una de las subcarpetas, esperar a que se complete, y luego ejecutar terraform apply en la siguiente subcarpeta. ¿Cómo se puede evitar este tedioso y largo proceso?
Cuando ejecute este comando, Terragrunt buscará recursivamente a través de todas las subcarpetas del directorio de trabajo actual, encontrará todas las carpetas con un archivo terragrunt.hcl, y ejecutará terragrunt apply en cada una de esas carpetas simultáneamente.
Si tus módulos tienen dependencias entre ellos-por ejemplo, no puedes desplegar la aplicación backend hasta que MySQL y redis estén desplegados-necesitarás expresar esas dependencias en tu configuración de Terragrunt como se explica en la siguiente sección.
Nota adicional: Si tus módulos tienen dependencias entre ellos, y ejecutas un comando terragrunt run-all destroy, Terragrunt destruirá todos los módulos bajo el directorio de trabajo actual, así como cada una de las dependencias del módulo (es decir, los módulos de los que dependes a través de dependencias y bloques de dependencia). Si desea excluir las dependencias de ser destruidas, añada la bandera –terragrunt-ignore-external-dependencies, o utilice la opción –terragrunt-exclude-dir una vez para cada directorio que desee excluir.
Ansible espera hasta que el comando tenga éxito
Al subclasificar tf.Module, cualquier instancia de tf.Variable o tf.Module asignada a las propiedades de este objeto se recoge automáticamente. Esto permite guardar y cargar variables, y también crear colecciones de tf.Modules.
Las instancias tf.Module recogerán automáticamente, de forma recursiva, cualquier instancia tf.Variable o tf.Module asignada a ella. Esto permite gestionar colecciones de tf.Modules con una sola instancia de modelo, y guardar y cargar modelos completos.
Los puntos de control constan de dos tipos de archivos: los datos propiamente dichos y un archivo de índice para los metadatos. El archivo de índice lleva la cuenta de lo que realmente se guarda y la numeración de los puntos de control, mientras que los datos de los puntos de control contienen los valores de las variables y sus rutas de búsqueda de atributos.
Los modelos y las capas pueden cargarse desde esta representación sin necesidad de crear una instancia de la clase que los creó. Esto es deseable en situaciones en las que no se tiene (o no se quiere) un intérprete de Python, como el servicio a escala o en un dispositivo de borde, o en situaciones en las que el código original de Python no está disponible o no es práctico utilizarlo.
Ansible duerme durante 10 segundos
En mi main.js, estoy leyendo un archivo de forma asíncrona. Una vez cargado mi archivo, establezco algunos objetos en el espacio de nombres GLOBAL y los utilizo en mis módulos requeridos (utilizar o no el espacio de nombres GLOBAL es una historia diferente, lo estoy utilizando de todos modos).
Mi módulo requerido espera inmediatamente que esa variable exista en el momento de la carga. Entonces, ¿cómo hago para que espere hasta que se complete la lectura de mi archivo en el main.js? ¿Simplemente requiero el módulo en el callback de readFile? ¿O hay una forma mejor de hacerlo?
Sí, simplemente sigue la regla #1 de la programación asíncrona. Las cosas que dependen de la devolución de llamada que está sucediendo deben ser ejecutadas en esa devolución de llamada. Como tu require depende de la variable establecida en async, sólo puedes usar tu require dentro de ella:
Entradas relacionadas
Bienvenid@, soy Patricia Gómez y te invito a leer mi blog de interés.