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 terraform.plan

Workflow

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

# 2. Generate import blocks and write to file
generate-imports 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.1.2.tar.gz (17.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.1.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: generate_imports_from_plan-0.1.2.tar.gz
  • Upload date:
  • Size: 17.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.1.2.tar.gz
Algorithm Hash digest
SHA256 0c7badf4da8bbb04a55e2fcc0598894bf0d7d5c5b0c4823104c994c35af4a77a
MD5 07f4e9d2b57e06d220c0db5f8eee77ce
BLAKE2b-256 0c0625649495eb63dfbf623a2fd937688102a7e19190629faf3d005954bbf028

See more details on using hashes here.

File details

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

File metadata

  • Download URL: generate_imports_from_plan-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.3 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.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9d4ab5cfaada8be83ff4bd8e669fed919a1be613fb2a445bca35d6293ef24b67
MD5 dc7802952da9aa4b446e36b2f5bc8ab7
BLAKE2b-256 51a8ff635a74d8690741310c7380971c1735df7de48a4cface149fe1f3450dcd

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