Autoplanning
En cualquier pull request nuevo o nuevo commit a un pull request existente, Atlantis intentará executar terraform plan en los directorios que considera que contienen proyectos de Terraform modificados.
El algoritmo que usa es el siguiente:
- Obtener la lista de todos los archivos modificados en el pull request
- Filtrar a aquellos que coincidan con la
--autoplan-file-listconfigurada (por defecto incluye.tf,.tf.json,.tfvars,.tofu,.tofu.json, etc.) - Obtener los directorios en los que están esos archivos
- Si la ruta del directorio no contiene
modules/entonces intentar ejecutarplanen ese directorio - Si sí contiene
modules/, mirar el directorio un nivel por encima demodules/. Si contiene un archivo indicador de proyecto soportado (*.tf,*.tf.json,*.tofu,*.tofu.json, oterragrunt.hcl) ejecutar plan en ese directorio, de lo contrario ignorar el cambio (ver abajo para las excepciones).
Ejemplo
Dada la estructura de directorios:
plain
.
├── modules
│ └── module1
│ └── main.tf
└── project1
├── main.tf
└── modules
└── module1
└── main.tf- Si se modificara
project1/main.tf, ejecutaríamosplanenproject1 - Si se modificara
modules/module1/main.tf, no ejecutaríamos automáticamenteplanporque no podríamos determinar la ubicación del proyecto de Terraform- Podrías usar un archivo atlantis.yaml para especificar qué proyectos hacer plan cuando este módulo cambie
- Podrías habilitar module autoplanning, que indexa proyectos según sus dependencias de módulos locales.
- O podrías hacer plan manualmente con
atlantis plan -d <dir>
- Si se modificara
project1/modules/module1/main.tf, miraríamos un nivel por encima deproject1/moduleshaciaproject1/, veríamos que había un archivomain.tfy por lo tanto ejecutaríamos plan enproject1/
Notas específicas de Bitbucket
Bitbucket no tiene un webhook que se active solo cuando hay un PR nuevo o un commit nuevo. Para solucionar esto, almacenamos en caché el último commit para ver si ha cambiado. Si la caché se vacía, Atlantis pensará que tu commit es nuevo y podrías ver planes adicionales. Este escenario puede ocurrir si:
- Atlantis se reinicia
- Estás ejecutando múltiples instancias de Atlantis detrás de un balanceador de carga
Personalización
Si deseas personalizar cómo Atlantis determina en qué directorio ejecutar o deshabilitarlo por completo, necesitas crear un archivo atlantis.yaml. Consulta