terraform
Ce module fournit des fonctions réutilisables pour gérer l'infrastructure avec Terraformde manière portable et reproductible
Le module utilise un pattern "builder" avec chaînage de fonctions :
dagger call container --source . --workdir terraform \
with-secret --name vsphere_user --value env:VSPHERE_USER \
with-secret --name vsphere_password --value env:VSPHERE_PASSWORD \
with-tf-var --key-value "vsphere_server=vcenter.local" \
plan
Installation
dagger install dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0Entrypoint
Return Type
Terraform ! Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
func (m *MyModule) Example() *dagger.Terraform {
return dag.
Terraform()
}@function
def example() -> dagger.Terraform:
return (
dag.terraform()
)@func()
example(): Terraform {
return dag
.terraform()
}Types
Terraform 🔗
container() 🔗
Container crée un conteneur Terraform de base C’est le point d’entrée pour construire une exécution Terraform
Exemple:
dagger call container --source . --terraform-dir terraform
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| source | Directory ! | - | Répertoire source contenant les fichiers Terraform |
| terraformVersion | String | "1.9.8" | Version de Terraform à utiliser |
| terraformDir | String | "." | Répertoire de travail relatif dans source (ex: "terraform/") |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATHfunc (m *MyModule) Example(source *dagger.Directory) *dagger.TerraformContainer {
return dag.
Terraform().
Container(source)
}@function
def example(source: dagger.Directory) -> dagger.TerraformContainer:
return (
dag.terraform()
.container(source)
)@func()
example(source: Directory): TerraformContainer {
return dag
.terraform()
.container(source)
}Container 🔗
TerraformContainer encapsule un conteneur Terraform pour permettre le chaînage de méthodes
container() 🔗
Return Type
Container ! Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
containerfunc (m *MyModule) Example(source *dagger.Directory) *dagger.Container {
return dag.
Terraform().
Container(source).
Container()
}@function
def example(source: dagger.Directory) -> dagger.Container:
return (
dag.terraform()
.container(source)
.container()
)@func()
example(source: Directory): Container {
return dag
.terraform()
.container(source)
.container()
}withSecret() 🔗
WithSecret ajoute un secret Terraform (TFVAR*) Cette fonction est chainable et retourne un nouveau container
Exemple:
dagger call container --source . \
with-secret --name vsphere_user --value env:VSPHERE_USER \
with-secret --name vsphere_password --value env:VSPHERE_PASSWORD
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| key | String ! | - | Nom de la variable Terraform (sans le préfixe TF_VAR_) Exemple: "vsphere_user", "fortigate_token" |
| value | Secret ! | - | Valeur du secret |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
with-secret --key string --value env:MYSECRETfunc (m *MyModule) Example(source *dagger.Directory, key string, value *dagger.Secret) *dagger.TerraformContainer {
return dag.
Terraform().
Container(source).
WithSecret(key, value)
}@function
def example(source: dagger.Directory, key: str, value: dagger.Secret) -> dagger.TerraformContainer:
return (
dag.terraform()
.container(source)
.with_secret(key, value)
)@func()
example(source: Directory, key: string, value: Secret): TerraformContainer {
return dag
.terraform()
.container(source)
.withSecret(key, value)
}withTfVar() 🔗
WithTfVar ajoute une variable Terraform (non sensible) Cette fonction est chainable et retourne un nouveau container
Exemple:
dagger call container --source . \
with-tf-var --key vsphere_server --value vcenter.local \
with-tf-var --key vsphere_datacenter --value DC1
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| key | String ! | - | Nom de la variable Terraform (sans le préfixe TF_VAR_) |
| value | String ! | - | Valeur de la variable |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
with-tf-var --key string --value stringfunc (m *MyModule) Example(source *dagger.Directory, key string, value string) *dagger.TerraformContainer {
return dag.
Terraform().
Container(source).
WithTfVar(key, value)
}@function
def example(source: dagger.Directory, key: str, value: str) -> dagger.TerraformContainer:
return (
dag.terraform()
.container(source)
.with_tf_var(key, value)
)@func()
example(source: Directory, key: string, value: string): TerraformContainer {
return dag
.terraform()
.container(source)
.withTfVar(key, value)
}withAwsCredentials() 🔗
WithAwsCredentials ajoute les credentials AWS pour le backend S3 Cette fonction est chainable et retourne un nouveau container
Note: Ces variables ne sont PAS des TF_VAR, elles sont utilisées par le backend S3
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| accessKeyId | Secret ! | - | AWS Access Key ID |
| secretAccessKey | Secret ! | - | AWS Secret Access Key |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
with-aws-credentials --access-key-id env:MYSECRET --secret-access-key env:MYSECRETfunc (m *MyModule) Example(source *dagger.Directory, accessKeyId *dagger.Secret, secretAccessKey *dagger.Secret) *dagger.TerraformContainer {
return dag.
Terraform().
Container(source).
WithAwsCredentials(accessKeyId, secretAccessKey)
}@function
def example(source: dagger.Directory, access_key_id: dagger.Secret, secret_access_key: dagger.Secret) -> dagger.TerraformContainer:
return (
dag.terraform()
.container(source)
.with_aws_credentials(access_key_id, secret_access_key)
)@func()
example(source: Directory, accessKeyId: Secret, secretAccessKey: Secret): TerraformContainer {
return dag
.terraform()
.container(source)
.withAwsCredentials(accessKeyId, secretAccessKey)
}init() 🔗
Init initialise Terraform (terraform init)
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY \
init
Return Type
String !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| initArgs | [String ! ] | - | Options supplémentaires pour terraform init |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
initfunc (m *MyModule) Example(ctx context.Context, source *dagger.Directory) string {
return dag.
Terraform().
Container(source).
Init(ctx)
}@function
async def example(source: dagger.Directory) -> str:
return await (
dag.terraform()
.container(source)
.init()
)@func()
async example(source: Directory): Promise<string> {
return dag
.terraform()
.container(source)
.init()
}plan() 🔗
Plan génère et affiche un plan d’exécution Terraform (terraform plan)
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY \
with-secret --name vsphere_user --value env:VSPHERE_USER \
with-secret --name vsphere_password --value env:VSPHERE_PASSWORD \
plan
Return Type
String !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| detailedExitcode | Boolean | true | Utiliser -detailed-exitcode (0=no changes, 1=error, 2=changes) |
| planArgs | [String ! ] | - | Options supplémentaires pour terraform plan |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
planfunc (m *MyModule) Example(ctx context.Context, source *dagger.Directory) string {
return dag.
Terraform().
Container(source).
Plan(ctx)
}@function
async def example(source: dagger.Directory) -> str:
return await (
dag.terraform()
.container(source)
.plan()
)@func()
async example(source: Directory): Promise<string> {
return dag
.terraform()
.container(source)
.plan()
}apply() 🔗
Apply applique les changements Terraform (terraform apply)
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY \
with-secret --key vsphere_user --value env:VSPHERE_USER \
apply
Return Type
String !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| autoApprove | Boolean | true | Appliquer automatiquement sans confirmation |
| applyArgs | [String ! ] | - | Options supplémentaires pour terraform apply |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
applyfunc (m *MyModule) Example(ctx context.Context, source *dagger.Directory) string {
return dag.
Terraform().
Container(source).
Apply(ctx)
}@function
async def example(source: dagger.Directory) -> str:
return await (
dag.terraform()
.container(source)
.apply()
)@func()
async example(source: Directory): Promise<string> {
return dag
.terraform()
.container(source)
.apply()
}output() 🔗
Output récupère les outputs Terraform au format JSON
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY \
output
Return Type
String !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| outputName | String | - | Nom de l'output spécifique (laisser vide pour tous) |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
outputfunc (m *MyModule) Example(ctx context.Context, source *dagger.Directory) string {
return dag.
Terraform().
Container(source).
Output(ctx)
}@function
async def example(source: dagger.Directory) -> str:
return await (
dag.terraform()
.container(source)
.output()
)@func()
async example(source: Directory): Promise<string> {
return dag
.terraform()
.container(source)
.output()
}destroy() 🔗
Destroy détruit l’infrastructure gérée par Terraform (terraform destroy)
Exemple:
dagger call container --source . \
with-aws-credentials --access-key-id env:AWS_ACCESS_KEY_ID --secret-access-key env:AWS_SECRET_ACCESS_KEY \
with-secret --name vsphere_user --value env:VSPHERE_USER \
destroy
Return Type
String !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| autoApprove | Boolean | true | Détruire automatiquement sans confirmation |
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
container --source DIR_PATH \
destroyfunc (m *MyModule) Example(ctx context.Context, source *dagger.Directory) string {
return dag.
Terraform().
Container(source).
Destroy(ctx)
}@function
async def example(source: dagger.Directory) -> str:
return await (
dag.terraform()
.container(source)
.destroy()
)@func()
async example(source: Directory): Promise<string> {
return dag
.terraform()
.container(source)
.destroy()
}