2 min read | by Jordi Prats
To be able to save data generated using terraform to be able to import the terraform state somewhere else using terraform_remote_state or retrieving it using the CLI we need to use the output directive:
output "alb_dns_name" {
description = "ALB DNS name"
value = aws_alb.jenkins-alb.dns_name
}
We can use terraform output for getting all the outputs:
$ terraform output web
web = "jenkins.pet2cattle.com"
helm_jenkins_values = tolist([
<<-EOT
image:
repository: jenkins
tag: 2.60.3
pullPolicy: IfNotPresent
pullSecrets: []
lts: true
(...)
EOT,
])
We can also retrieve just one of then, for example:
$ terraform output web
"jenkins.pet2cattle.com"
We can also use the -raw option for getting just the data:
$ terraform output -raw web
jenkins.pet2cattle.com
We can also output complex types, for example the compounded values from values and set attributes of a helm_release* resource:
output helm_jenkins_values {
value = helm_release.jenkins.values
}
If we try to retrieve it we will get the following output:
$ terraform output helm_jenkins_values
tolist([
<<-EOT
image:
repository: jenkins
tag: 2.60.3
pullPolicy: IfNotPresent
pullSecrets: []
lts: true
(...)
EOT,
])
But we won't be able to retrieve it as a raw value since it is a complex type:
$ terraform output -raw helm_jenkins_values
Error: Unsupported value for raw output
The -raw option only supports strings, numbers, and boolean values, but output
value "helm_jenkins_values" is list of string.
Use the -json option for machine-readable representations of output values
that have complex types.
To be able to retrieve it as a yaml, we will need to tell terraform to output it as a json and then use jq for rendering the data contained in the first item of the array:
$ terraform output -json helm_jenkins_values | jq -r .[0]
image:
repository: jenkins
tag: 2.60.3
pullPolicy: IfNotPresent
pullSecrets: []
lts: true
nameOverride: ""
fullnameOverride: ""
(...)
Posted on 16/04/2021