Dagger
Search

terraform

Ce module fournit des fonctions réutilisables pour gérer l'infrastructure avec Terraform
de 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@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0

Entrypoint

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
NameTypeDefault ValueDescription
sourceDirectory !-Répertoire source contenant les fichiers Terraform
terraformVersionString "1.9.8"Version de Terraform à utiliser
terraformDirString "."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_PATH
func (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 \
 container
func (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
NameTypeDefault ValueDescription
keyString !-Nom de la variable Terraform (sans le préfixe TF_VAR_) Exemple: "vsphere_user", "fortigate_token"
valueSecret !-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:MYSECRET
func (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
NameTypeDefault ValueDescription
keyString !-Nom de la variable Terraform (sans le préfixe TF_VAR_)
valueString !-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 string
func (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
NameTypeDefault ValueDescription
accessKeyIdSecret !-AWS Access Key ID
secretAccessKeySecret !-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:MYSECRET
func (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
NameTypeDefault ValueDescription
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 \
 init
func (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
NameTypeDefault ValueDescription
detailedExitcodeBoolean trueUtiliser -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 \
 plan
func (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
NameTypeDefault ValueDescription
autoApproveBoolean trueAppliquer 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 \
 apply
func (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
NameTypeDefault ValueDescription
outputNameString -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 \
 output
func (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
NameTypeDefault ValueDescription
autoApproveBoolean trueDétruire automatiquement sans confirmation
Example
dagger -m dev.azure.com/dordogne/DAGGER-TEMPLATES/_git/DAGGER-TEMPLATES/iac/terraform@35bf1ad02e27c3a7eb59c1d696eb74cf246e94c0 call \
 container --source DIR_PATH \
 destroy
func (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()
}