Integrar Flux con Microsoft Teams

Otra de las capacidades que nos ofrece Flux es la posibilidad de conectarse con diferentes sistemas para el envío de notificaciones cuando algo ocurre en la configuración de nuestro clúster. Esto suele ser muy útil ya que nos permite estar informados sin tener que estar atentos. Hoy quiero mostrarte cómo podemos integrar estas notificaciones con Microsoft Teams.

Crear canal en Teams

Desde el punto de vista de Teams, lo que necesitas es un canal desde el cual notificarás a los miembros del mismo de los cambios. Si todavía no tienes uno puedes crearlo a través de la sección Teams, haciendo clic en el botón inferior llamado Join or create a team y seleccionando en el lado derecho Create team:

Para este ejemplo utilizamos la opción From Scratch y lo dejamos en modo Privado, para que se necesario solicitar el acceso. En mi caso le he dado el nombre Flux Notifications.

Ahora, en el mismo canal General accedemos a los tres puntos que aparecen en el lado derecho superior y vamos a la opción Connectors.

En ella tendrás uno llamado Incoming WebHook, que es el que necesita Flux para poder mandar las notificaciones.

Hacemos clic en él para añadirlo y, una vez hecho, volvemos a entrar en esta sección, donde ahora en lugar de poner Add pone Configure.

Haciendo clic de nuevo sobre este, elige un nombre, en mi caso ha sido flux notifications, y haz clic en el botón Create. Al cabo de unos instantes obtendrás la URL de tu WebHook:

Copia la misma y resérvala para después.

Crear un cluster de Kubernetes

Ahora que ya tienes un canal de Teams donde publicar los eventos que vayan ocurriendo en Flux, lo siguiente que necesitas es un clúster de Kubernetes. En mi caso voy a usar AKS para alojarlo. Puedes crear uno fácilmente con los siguientes comando:

# Variables
ASK_NAME="flux-loves-teams"
RESOURCE_GROUP="flux-notifications-via-teams"
LOCATION="northeurope"

# Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION

# Create a AKS cluster
az aks create --resource-group $RESOURCE_GROUP --name $ASK_NAME --node-count 1 --generate-ssh-keys

Configurar Flux

Si bien es cierto que ya tenemos en preview la integración nativa de Flux con AKS, en este artículo vamos a configurarlo como te conté en el primer artículo que escribí sobre esta herramienta:

# Configure flux
export GITHUB_TOKEN=<YOUR_GITHUB_TOKEN>
export GITHUB_USER=<YOUR_GITHUN_USER>

flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=flux-teams-notifications \
  --branch=main \
  --path=./clusters/$ASK_NAME \
  --personal

git clone https://github.com/$GITHUB_USER/flux-teams-notifications.git

cd flux-teams-notifications

Configurar notificaciones en Flux

Para poder enviar notificaciones fuera de Flux, primero necesitas decirle a dónde. Es por ello que lo siguiente que necesitas es crear un proveedor de alertas, el cual se conectará con nuestro Teams. Antes de crearlo debes generar un secreto que almacene la URL del WebHook que guardaste anteriormente:

# Create a secret with MS Teams webhook
WEBHOOK="<WEBHOOK_URL>"

kubectl create secret generic teams-webhook --from-literal=address=$WEBHOOK -n flux-system

Ahora crea el proveedor con el siguiente comando:

# Create a flux configuration for notifications
flux create alert-provider teams \
--type msteams \
--secret-ref teams-webhook \
--export > ./clusters/$ASK_NAME/teams-provider.yaml

Por último, necesitas alguna alerta por la cual serás notificado. En este ejemplo voy a crear una que nos informará cada vez que ocurra algo con los recursos de tipo GitRepository o Kustomization en el namespace flux-system:

# Create an alert
flux create alert flux-teams-notifications \
--provider-ref teams \
--event-severity info \
--event-source Kustomization/flux-system,GitRepository/flux-system \
--export > ./clusters/$ASK_NAME/teams-alert.yaml

Guarda los cambios en el repo que supervisa Flux para su configuración:

git add .
git commit -m "change type for msteams"
git push

flux get kustomizations -w

y espera a que se materialicen los cambios:

flux get kustomizations -w

Para comprobar que tanto el proveedor y la alerta están configuradas correctamente puedes lanzar estos dos comandos:

# Check the alert provider is configured
flux get alert-providers

# Check the alert is configured
flux get alerts

Probar que las notificaciones funcionan

Ahora, para probar que las notificaciones funcionan correctamente, podemos crear una configuración para un repositorio git:

# Create apps dir
mkdir -p ./clusters/$ASK_NAME/apps

# Create a source git
flux create source git kustomize-demo \
  --url=https://github.com/0GiS0/kustomize-demo \
  --branch=main \
  --interval=30s \
  --export > ./clusters/$ASK_NAME/apps/kustomize-demo.yaml

git add .
git commit -m "Create git source configuration"
git push

Al hacer esto, al cabo de unos instances, podrás ver un par de mensajes en el canal:

Nuevos mensajes al añadir un nuevo recurso del tipo GitRepository

Lo mismo ocurriría cuando trabajas con las personalizaciones:

# Create a Kustomization
flux create kustomization kustomize-demo \
  --source=kustomize-demo \
  --path="./prod" \
  --prune=true \
  --interval=5m \
  --export > ./clusters/$ASK_NAME/apps/kustomize-demo-prod.yaml

git add .
git commit -m "Create a kustomization"
git push

Se añadirán dos nuevas notificaciones a tu canal de Teams 😃

Mensajes al añadir un nuevo recurso del tipo Kustomization

¡Saludos!