Linting automatico para terraform con reviewdog y tflint
Introducción
En este artículo vamos a probar cómo lintar y obtener chequeos automáticos en nuestros pull requests de Github para nuestro código de terraform usando reviewdog y la acción tflint de github. Esto es particularmente útil para prevenir cambios no deseados o commits con errores que se mezclen en tu rama principal, sea cual sea. Para que esto funcione solo tenés que configurar una acción de Github en tu repo y listo, no necesitás generar ningún token ni hacer ningún paso extra.
Para hacer el ejemplo más simple, creé este repo con la configuración básica para hacerlo funcionar.
Terraform
Primero necesitamos nuestro código de terraform. Como podés ver, es una instancia ec2 simple en AWS, pero el tipo de instancia no existe, lo vamos a arreglar en un momento.
resource "aws_instance" "ec2_test" {
ami = "ari-67b95e0e"
instance_type = "t1.medium"
}
Github Workflow
Ya que estamos usando Github, podemos aprovechar Actions para correr un linter para nuestro código y marcar nuestro PR si algo está mal.
name: reviewdog
on: [pull_request]
jobs:
tflint:
name: runner / tflint
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
# Install latest Terraform manually as
# Docker-based GitHub Actions are
# slow due to lack of caching
# Note: Terraform is not needed for tflint
- name: Install Terraform
run: |
brew install terraform
# Run init to get module code to be able to use `--module`
- name: Terraform init
run: |
terraform init
# Minimal example
- name: tflint
uses: reviewdog/action-tflint@master
with:
github_token: ${{ secrets.github_token }}
# More complex example
- name: tflint
uses: reviewdog/action-tflint@master
with:
github_token: ${{ secrets.github_token }}
fail_on_error: "true" # Optional. Fail action if errors are found
Ejemplo de PR
Primero vamos a hacer un PR con un problema para ver cómo falla y cómo funciona el reporte (Para llegar acá podés hacer clic en la pestaña de checks en el PR y luego en el paso de tflint, mirá aquí).
Uno que realmente funciona
Ya que lo probamos y falló como esperábamos, ahora podemos arreglarlo, y ahora que reviewdog y tflint están contentos con nuestro commit, podemos simplemente mezclarlo (solo cambien de t1 a t2 en el archivo main.tf).
Notas finales
Para mí, esto parece particularmente útil porque puede capturar muchos errores que a veces son difíciles de detectar a simple vista, especialmente cuando hablamos de errores tipográficos. También es una buena práctica lintar tu código, así que ahí lo tenés. Espero que pruebes esto y tengas en cuenta que reviewdog puede revisar muchos lenguajes diferentes, solo elegí terraform porque es lo que más estoy usando últimamente.
Errata
Si ves algún error o tenés alguna sugerencia, por favor mandame un mensaje así lo arreglo.
También podés ver el código fuente y cambios en el código generado y en las fuentes acá.
No tienes cuenta? Regístrate aqui
Ya registrado? Iniciar sesión a tu cuenta ahora.
-
Comentarios
Online: 0
Por favor inicie sesión para poder escribir comentarios.