Breaking

Post Top Ad

Your Ad Spot

domingo, 15 de diciembre de 2019

Valores dinámicos en secuencias de comandos de Linux

Hago MUCHOS guiones. Dada la opción de hacer clic en una GUI en lugar de escribir en la línea de comando, elegiré la línea de comando. Dada la opción de escribir comandos repetidamente en lugar de escribir una tarea que realizo más de dos veces, escribiré un script. La creación de secuencias de comandos de manera efectiva es tanto un arte como una ciencia.
Mi idea de ciencia
Cuando una GUI puede cambiar, tanto en contenido como en diseño, un script se ve menos afectado por esto cuando está diseñado para trabajar dinámicamente con el catálogo. Tiene la opción de trabajar con los valores en una matriz o simplemente extraerlo en un archivo temporal para trabajar como parte del script. Para el ejemplo, me quedaré con este último para que nuestro ejemplo sea más fácil de reproducir.
Comencemos con un caso de uso de implementar una base de datos de Azure. Cuando un cliente toma la decisión de construirlo, se necesita información específica para implementar y esto continuará cambiando a medida que el catálogo de Azure se actualice con nuevas ofertas. Para nuestro ejemplo, nos quedaremos con un fragmento de código muy pequeño, ya que los valores que creamos dinámicamente se reutilizarán en todo el script. Este ejemplo omitirá la creación real del servidor, etc. y solo se centrará en la creación de la base de datos del usuario. El servidor, la zona y la suscripción se configuran en los pasos predeterminados anteriormente para no tener que repetirlo en cada paso de implementación de recursos.
Lo primero que debe saber un autor de un script CLI BASH es cómo construir una base de datos SQL desde la línea de comandos según la documentación:
az sql db create \
         --resource-group <nombre del grupo> \
         --name <nombre de la base de datos> \
         - objetivo-servicio <sku> \
         --capacity <capacity>
         --zone-redundant <verdadero / falso>
Luego evaluaremos qué partes de la implementación necesitarán actualizarse dinámicamente en cada implementación y las cambiaremos a variables:
az sql db create \ 
         --resource-group $ groupname \ 
         --name $ holname "_" $ use \ 
         --service-Objective $ sku \ 
         --capacity $ cap \ 
         --zone-redundant false
Para el fragmento anterior, fue fácil decidir que no crearía bases de datos redundantes de zona muy a menudo, por lo que decidí codificar esto con un valor falso, pero el resto de los valores, quiero generar dinámicamente.
Mi script solicitará como parte de la ejecución del script el nombre de lo siguiente y luego lo reutilizará durante la implementación del script:
Nombre del grupo de recursos = $ groupname
Hay un acrónimo de etiqueta de implementación que se utiliza para generar el nombre del servidor, los nombres de la base de datos y otros recursos. Cada uno de los recursos, según el tipo, se desarrollará a partir de ahí:
(holname = utw) + (use = DW) por lo que dbname = utw_DW
Los intrigantes, el trabajo son los valores de sku y capacidad. Estos pueden cambiar regularmente con Azure y deberán extraerse dinámicamente del catálogo de Azure. Para hacer esto, mi script BASH en la CLI hace un gran trabajo.
Primero capturo la información, preguntando a Azure por todas las versiones de la base de datos, por el valor de zona pasado que está disponible, (Verdadero) para esa zona. Saco la información en formato de tabla a un archivo titulado wh.lst:
az sql db list-editions -l $ zone -o table | grep True> wh.lst
Ejemplo de contenido del archivo:
 P1 Premium Premium 125 DTU Verdadero
 P2 Premium Premium 250 DTU Verdadero
 P4 Premium Premium 500 DTU Verdadero
 P6 Premium Premium 1000 DTU Verdadero
 P11 Premium Premium 1750 DTU Verdadero
 P15 Premium Premium 4000 DTU Verdadero
Ahora tengo este archivo que se utilizará para extraer la información que necesito a medida que avance en mi secuencia de comandos. El siguiente paso es "capturar" los datos del archivo y luego usar un comando AWK para extraer la primera y cuarta palabra de la tabla para crear una lista de tamaños de Skus y DTU para que la persona que ejecuta el script elija:
gato wh.lst | awk '{print "SKU:" $ 1, "DTU:" $ 4}' | tr -d \ "\,
Ejemplo de salida:
 SKU: P1 DTU: 125
 SKU: P2 DTU: 250
 SKU: P4 DTU: 500
 SKU: P6 DTU: 1000
 SKU: P11 DTU: 1750
 SKU: P15 DTU: 4000
...
 SKU: DW400 DTU: 3000
 SKU: DW400c DTU: 3600
 SKU: DW500 DTU: 3750
....
Le pido al usuario que elija un sku de la lista y lo ingrese en el indicador. El sku elegido se convertirá en el valor de $ brcksize y el valor de DTU para ese sku se convertirá en el $ cap o capacidad en mi paso de implementación.
export cap = $ (cat wh.lst | grep $ brcksize "" | awk '{print $ 4}' | tr -d \ "\,)
Si elegimos uno de los skus de arriba para SQL Warehouse, como DW400, notará que no confunde a DW400c y devuelve ambos porque he ordenado a mi comando que agregue un espacio después, (grep $ brcksize "") . Estos son los detalles que deben pensarse y probarse a medida que automatiza los procesos.
Para nuestra base de datos de ejemplo, crearemos un Azure DB premium, eligiendo el sku P6:
gato wh.lst | grep P6 "" | awk '{print $ 4}' | tr -d \ "\,
Salida de lo anterior: 3000
Ahora podemos ver que con este proceso, el script reemplazará los siguientes valores en la creación de nuestra base de datos con un comando de la CLI de Azure totalmente calificado para crear una base de datos P6:
 az sql db create \
         --resource-group UTW_Group \
         --name utw_DW \
         - objetivo de servicio P6 \
         - capacidad 1000 \
         --zona redundante falso 
Espero que este breve ejemplo demuestre el valor de las secuencias de comandos dinámicas de Linux no solo para automatizar, sino también para crear una automatización dinámica que pueda reutilizarse una y otra vez con implementaciones infinitas, ajustadas a las necesidades del proyecto.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas