Getting a terraform plan in json format

terraform plan json terraform show

2 min read | by Jordi Prats

Starting terraform v0.12 we can get the terraform plan in json format. To do so, first we will need to save the plan to a file:

$ terraform plan -out demo.plan 

This file is going to be a zip file that it is not intended to be unzipped, instead we can use the terraform show command to see it's contents:

$ terraform show demo.plan An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols:  + create Terraform will perform the following actions:  # kubernetes_namespace.jenkins_namespace will be created  + resource "kubernetes_namespace" "jenkins_namespace" {  + id = (known after apply)  + metadata {  + generation = (known after apply)  + name = "jenkins"  + resource_version = (known after apply)  + self_link = (known after apply)  + uid = (known after apply)  }  } (...) Plan: 3 to add, 0 to change, 0 to destroy. 

Despite that we can also use terraform show to output it using json format with far more details:

$ terraform show -json demo.plan | python -m json.tool {  "format_version": "0.1",  "terraform_version": "0.12.29",  "variables": {  "additional_plugins": {  "value": []  },  "jenkins_namespace": {  "value": "jenkins"  }  },  "planned_values": {  "root_module": {  "resources": [  {  "address": "kubernetes_namespace.jenkins_namespace",  "mode": "managed",  "type": "kubernetes_namespace",  "name": "jenkins_namespace",  "provider_name": "kubernetes",  "schema_version": 0,  "values": {  "metadata": [  {  "annotations": null,  "generate_name": null,  "labels": null,  "name": "jenkins"  }  ],  "timeouts": null  }  }  ], (...) 

Output format is versioned, so it might change in the future, even though it is using the same format for 0.12, 0.13 and 0.14

"format_version": "0.1", 

Posted on 28/01/2021

Categories