Skip to main content

Generate Terraform import blocks directly from a binary .plan file

Project description

generate-imports-from-plan

Generates Terraform import {} blocks directly from a binary .plan file — no terraform CLI, no provider plugins, no terraform init required.

Why?

terraform show -json does not expose all planned attribute values — computed fields like resource names and resource group names are missing from the JSON output. This tool reads the raw msgpack-encoded attributes directly from the binary plan, giving access to all values needed to construct Azure resource IDs.

Installation

uvx generate-imports-from-plan terraform.plan

Or install permanently:

uv tool install generate-imports-from-plan
generate-imports-from-plan terraform.plan

Workflow

# 1. Generate plan
terraform plan -out terraform.plan

# 2. Generate import blocks and write to file
generate-imports-from-plan terraform.plan > imports.tf

# 3. Fill in any remaining # TODO ids, then re-plan and apply
terraform plan -out terraform.plan
terraform apply terraform.plan

Output

import {
  to = module.core.azurerm_resource_group.this
  id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-myapp-dev-we-01"
}

import {
  to = module.core.azurerm_storage_account.this
  id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-myapp-dev-we-01/providers/Microsoft.Storage/storageAccounts/stmyapp01"
}

Resources whose type is not in the built-in formula table get an empty id with a # TODO comment.

Flags

Flag Description
--skip-imported Skip resources that already have an import {} block in the config
--list Print address\tid pairs instead of HCL blocks
--list --powershell Output a PowerShell array literal of resource addresses
--target ADDR [ADDR ...] Only process the specified resource addresses
--debug Dump all decoded attributes per resource — useful when an ID shows a placeholder

Adding a resource type

If a resource type is missing, extend _ID_FORMULAS in generate_imports.py:

"azurerm_my_resource":
    lambda a, s: _arm(s, _str(a, "resource_group_name"),
                      "Microsoft.MyNamespace/myResources", _str(a, "name")),

_arm(sub, rg, *segments) builds /subscriptions/{sub}/resourceGroups/{rg}/providers/{...}.
_str(attrs, key) returns the attribute value or <key> as a placeholder when unknown.

Use --debug to see all available attribute names for an unrecognised resource type.

Requirements

  • Python 3.11+
  • uv (for uvx)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

generate_imports_from_plan-0.2.0.tar.gz (33.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

generate_imports_from_plan-0.2.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file generate_imports_from_plan-0.2.0.tar.gz.

File metadata

  • Download URL: generate_imports_from_plan-0.2.0.tar.gz
  • Upload date:
  • Size: 33.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for generate_imports_from_plan-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2357ef51dd8b64ff8039dc29c38a3b2cf30b7d486070b4a828dee1edfb44e2e0
MD5 d8c76359c086172389affa904f4b5e0d
BLAKE2b-256 b903674d280bd98f6a07eafd6ce18f132ad825c3921f70534acde2da7ef0b9fc

See more details on using hashes here.

File details

Details for the file generate_imports_from_plan-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: generate_imports_from_plan-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for generate_imports_from_plan-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d95b34f082c75758f9dd17014884279a4f1622ae5c971936fd75b4008947fdd
MD5 0d9c846305b094b5efa3e4368fbe8fc0
BLAKE2b-256 4f2d49ad9124b4de2eceb3f692d9494adfe8e94b478ac1085c264911e8e21f1e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page