Reading Terraform outputs from a YAML pipeline
When using Terraform and YAML pipelines in Azure DevOps, it’s not clear how to read the output variables of a Terraform configuration.
The basics
First, you have to name the task that you’re using to apply.
- task: TerraformTaskV1@0
name: TerraformOutputs
inputs:
provider: 'azurerm'
command: 'apply'
Then, the task will store the output variables in a json file in a certain file path. You can get this path through the jsonOutputVariablesPath
variable.
Then you can use this Azure DevOps task output variable and read the file then parse it for values.
For example, here’s an example using bash reading the cluster_name
and the resource_group_name
output variables from Terraform.
- bash: |
CLUSTER_NAME=$(cat $(TerraformOutputs.jsonOutputVariablesPath) | jq '.cluster_name.value' -r)
RESOURCE_GROUP_NAME=$(cat $(TerraformOutputs.jsonOutputVariablesPath) | jq '.resource_group_name.value' -r)
How this works is this:
- Using bash, we use
cat
to read the contents of the file - Then, we pipe the output to an utility called jq which will parse the raw string to json and allow us to filter its values
- Applying a jq filter, we look for the raw value of those variables. For example: see this snippet
- We assign the filtered value to a variable
Pipeline Variables
Once the value is parsed, it can then be assigned to a pipeline variable. Here’s how to do it from bash.
echo "##vso[task.setvariable variable=Outputs.ClusterName]$CLUSTER_NAME"