Di recente abbiamo aperto Terratest , il nostro coltellino svizzero per testare il codice dell'infrastruttura.
Oggi, probabilmente stai testando tutto il codice dell'infrastruttura manualmente distribuendo, convalidando e non implementando. Terratest ti aiuta ad automatizzare questo processo:
- Scrivi test in Go.
- Usa gli helper di Terratest per eseguire i tuoi veri strumenti IaC (ad es. Terraform, Packer, ecc.) Per distribuire infrastrutture reali (ad es. Server) in un ambiente reale (ad es. AWS).
- Usa gli helper in Terratest per verificare che l'infrastruttura funzioni correttamente in quell'ambiente effettuando richieste HTTP, chiamate API, connessioni SSH, ecc.
- Usa gli helper in Terratest per disimpegnare tutto alla fine del test.
Ecco un esempio di test per alcuni codici Terraform:
terraformOptions := &terraform.Options {
// The path to where your Terraform code is located
TerraformDir: "../examples/terraform-basic-example",
}
// This will run `terraform init` and `terraform apply` and fail the test if there are any errors
terraform.InitAndApply(t, terraformOptions)
// At the end of the test, run `terraform destroy` to clean up any resources that were created
defer terraform.Destroy(t, terraformOptions)
// Run `terraform output` to get the value of an output variable
instanceUrl := terraform.Output(t, terraformOptions, "instance_url")
// Verify that we get back a 200 OK with the expected text
// It can take a minute or so for the Instance to boot up, so retry a few times
expected := "Hello, World"
maxRetries := 15
timeBetweenRetries := 5 * time.Second
http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)
Questi sono test di integrazione e, a seconda di ciò che stai testando, possono richiedere da 5 a 50 minuti. Non è veloce (anche se usando Docker e le fasi di test , puoi accelerare alcune cose) e dovrai lavorare per rendere i test affidabili, ma vale la pena.
Dai un'occhiata al repository Terratest per i documenti e molti esempi di vari tipi di codice di infrastruttura e i test corrispondenti per loro.