Skip to content

Unsupported Resource Metadata

Provider-local unsupported_resources.json files document resources that Terraformer should not import broadly without additional provider-specific work. They are evidence records, not a backlog of unimplemented resources.

Keep these files next to the provider implementation, for example providers/aws/unsupported_resources.json. Omit the file when a provider has no evidence-backed unsupported resources yet.

Add an entry when investigation shows that broad import would produce misleading, unsafe, duplicate, or non-refreshable Terraform configuration. Common cases include write-only secrets, operation-style resources, runtime-generated resources, provider-managed resources, and resources whose provider read path cannot reconstruct required configuration after import.

Do not add speculative entries. Do not use metadata as a substitute for investigating importability. Do not mark a resource unsupported only because Terraformer has not implemented it yet. Do not include secrets, tokens, customer data, or other sensitive values in reason, evidence, or references.

Each provider file uses version 1 and a resources array:

{
"version": 1,
"resources": [
{
"resource": "provider_resource_name",
"service_family": "service-or-api-family",
"reason": "Short explanation of why broad import is unsafe or deferred.",
"evidence": "Concrete evidence from provider docs, API behavior, code, or issue analysis.",
"status": "unsupported",
"references": [
"https://registry.terraform.io/providers/example/example/latest/docs/resources/resource_name"
]
}
]
}

Required fields for each resource entry:

FieldRequirement
resourceNon-empty Terraform resource type or native resource identifier.
service_familyNon-empty service, API group, or ownership family.
reasonNon-empty short explanation of the import limitation.
evidenceNon-empty concrete support for the classification.
statusNon-empty value from the status table below.
referencesNon-empty string array. Each reference must be non-empty.
StatusMeaning
unsupportedImport is known to be unsafe or not viable with the current provider/API behavior.
deferredNeeds a dedicated follow-up because ownership, API shape, feature gates, or framework support require more design.
not-importableTerraform provider or resource semantics do not expose a usable import/read path.
cloudflare-managedCloudflare owns or manages the configuration, so Terraformer should not emit it as user-managed Terraform.
secret-requiredRequired configuration contains write-only credentials, secrets, private keys, or tokens.
request-styleResource represents a request, handshake, approval, or lifecycle action rather than stable inventory.
runtime-generatedResource is generated by a controller or runtime system and should not become Terraform-owned configuration.
runtime-dataResource represents runtime data or observed state rather than desired configuration.
action-styleResource represents an action or operation rather than durable configuration.
policy-skipResource is intentionally skipped by provider import policy even though it may be visible in discovery.

Good evidence identifies the exact failure mode: missing provider import support, provider read state that cannot reconstruct required fields, API list/read responses that omit required data, duplicate ownership with another Terraform resource, write-only credential fields, or controller-generated lifecycle state. Prefer references to Terraform provider docs, upstream API docs, Terraformer code paths, and tracking issues that explain the resource-specific decision.

Examples in this repository:

  • AWS records resources with import/read reconstruction issues, duplicate ownership, and unsupported provider semantics.
  • Datadog records integration resources where generator ownership and provider schema behavior need dedicated handling.
  • Cloudflare records account, zone, storage, platform, and managed resources that need follow-up or should remain provider-managed.
  • Kubernetes records native APIs that are runtime-generated, policy-skipped, or not importable as Terraform-managed configuration.
  • LaunchDarkly records beta, singleton, and event/report resources that need scoped follow-up.

Run the shared validation with:

Terminal window
go test ./providers

The repo-wide test discovers every providers/*/unsupported_resources.json file and validates JSON decoding, schema version, required fields, non-empty references, allowed statuses, and duplicate resources. Provider-local tests may still add provider-specific assertions, such as expected Kubernetes skip-policy coverage.

For provider resource PRs, use the pull request checklist to confirm that evidence-backed unsupported resources discovered during the work were added to the provider-local metadata file, or that no metadata update was needed.

This inventory is an informational coverage snapshot. The source of truth is the discovered providers/*/unsupported_resources.json files validated by the Go test. Providers without metadata should remain not present yet until an evidence-backed unsupported resource has been investigated.

ProviderHas unsupported_resources.jsonHas provider-local unsupported_resources_test.goNotes
alicloudnononot present yet
auth0nononot present yet
awsyesnometadata present
azurenononot present yet
azureadnononot present yet
azuredevopsnononot present yet
cloudflareyesyesmetadata present; provider-specific assertions
commercetoolsnononot present yet
datadogyesnometadata present
digitaloceannononot present yet
equinixmetalnononot present yet
fastlynononot present yet
gcpnononot present yet
githubnononot present yet
gitlabnononot present yet
gmailfilternononot present yet
grafananononot present yet
herokunononot present yet
honeycombionononot present yet
ibmnononot present yet
ionoscloudnononot present yet
keycloaknononot present yet
kafkayesyesmetadata present; provider-specific assertions
kubernetesyesyesmetadata present; provider-specific assertions
launchdarklyyesnometadata present
linodenononot present yet
logzionononot present yet
mackerelnononot present yet
mikrotiknononot present yet
myrasecnononot present yet
newrelicnononot present yet
ns1nononot present yet
octopusdeploynononot present yet
oktanononot present yet
opalnononot present yet
openstacknononot present yet
opsgenienononot present yet
pagerdutynononot present yet
panosnononot present yet
rabbitmqnononot present yet
tencentcloudnononot present yet
vaultnononot present yet
vultrnononot present yet
xenorchestranononot present yet
yandexnononot present yet