Chef y MS SQL Server en Linux

Home  /  Chef  /  Chef y MS SQL Server en Linux

Chef y MS SQL Server en Linux

No votes yet.
Please wait...

Chef y MS SQL Server en Linux, como podemos desplegar una base de datos o una actualización de db desde un server linux automatizado con chef.

Hace tiempo me encontré con la necesidad de desplegar aplicaciones en un stack de Java + jboss + rhel, pero como motor de base de datos se utiliza MS SQL Server y quería que el despliegue de chef realizara las dos tareas el build de maven y crear o aplicar las actualizaciones de base de datos.

Para poder ejecutar querys y crear db tenemos el cookbook de database que da soporte a SQL Server, MySQL y PostgreSQL. Pero al utilizarlo me encontré con algunos errores en la ejecución de querys como que no utiliza la db que le configuras, ejecuta todo sobre la master db. Este y otros errores los corregí en el siguiente fork del cookbook. (Ya esta realizado el Merge request, estamos esperando que lo apliquen!!)

Pero por mas que ejecutara los script sql no podía garantizar el idempotenza en el resource de chef. Buscando encontré el Microsoft ODBC Driver 11 for SQL Server on Linux, es una herramienta de microsoft que no permite utilizar sqlcmd y bcp en entornos linux.

Y arme un cookbook llamado msodbcsql que instala y configura unixODBC.ini para poder conectarme desde la consola de linux a un server sql y ejecutar querys.

A continuación voy a mostrar algunos de ejemplos de como armar recursos idempotenza con estos dos cookbook.

Primero en nuestro metadata.rb

y en nuestra receta

Por ahora solo tenemos instalado msodbcsql y creada la entrada en nuestro odbc.ini para poder consultar por consola nuestro SQL Server.  Y también defino una variable sql_server_connection_info para poder utilizar los resources de el cookbook database.

Los siguientes recursos son idempotenza y no requieren un guard o condicional controlar su ejecución.

Como podemos ver creamos una base de datos en sql server y podemos crear un usuario de sql.
Pero ahora necesitamos poder hacer que nuestro usuario sea owner de esta base tenemos que ejecutar el sp addrolemember.

Como podemos apreciar con sqlcmd podemos verificar si ese role ya fue aplicado al usuario y así evitar repetir el paso, si ya de realizo.
Pero si complicamos mas las cosas esta aplicación tiene que desplegar un script de creación de tablas si la base de datos esta vaciá, pero si la base ya tiene las tablas creadas no debería ejecutar este paso. Para verificar esto ejecutamos un select a la information_schema.tables y realizamos un grep por el nombre de alguna tabla que debería existir en nuestra base en mi caso se llama VERSION.

Pero si es la segunda ves que lo ejecutamos y en realidad queremos actualizar la base podemos definir que la versión de la aplicación se encuentre en una tabla de la base en nuestro caso se llama VERSION y solo tiene un registro que se upgradea en cada despliegue con la versión actual de la aplicación.

En este post intento se un vista rápida para solucionar uno de los tantos problemas que se me presentaron al comenzar a automatizar con chef nuestra infraestructura. Y la versatilidad de chef permite resolver de varias formas estos inconvenientes.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *