{"record":{"id":"627e653c1fff08d9","repo":"hashicorp/terraform","slug":"error-parsing-q-as-a-provider-address-w","errorCode":null,"errorMessage":"Error parsing %q as a provider address: %w","messagePattern":"Error parsing %q as a provider address: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/getproviders/reattach/reattach.go","lineNumber":59,"sourceCode":"\t\ttype reattachConfig struct {\n\t\t\tProtocol        string\n\t\t\tProtocolVersion int\n\t\t\tAddr            struct {\n\t\t\t\tNetwork string\n\t\t\t\tString  string\n\t\t\t}\n\t\t\tPid  int\n\t\t\tTest bool\n\t\t}\n\t\tvar m map[string]reattachConfig\n\t\terr := json.Unmarshal([]byte(in), &m)\n\t\tif err != nil {\n\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid format for %s: %w\", TF_REATTACH_PROVIDERS, err)\n\t\t}\n\t\tfor p, c := range m {\n\t\t\ta, diags := addrs.ParseProviderSourceString(p)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Error parsing %q as a provider address: %w\", a, diags.Err())\n\t\t\t}\n\t\t\tvar addr net.Addr\n\t\t\tswitch c.Addr.Network {\n\t\t\tcase \"unix\":\n\t\t\t\taddr, err = net.ResolveUnixAddr(\"unix\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid unix socket path %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tcase \"tcp\":\n\t\t\t\taddr, err = net.ResolveTCPAddr(\"tcp\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid TCP address %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Unknown address type %q for %q\", c.Addr.Network, p)\n\t\t\t}\n\t\t\tunmanagedProviders[a] = &plugin.ReattachConfig{\n\t\t\t\tProtocol:        plugin.Protocol(c.Protocol),","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/hashicorp/terraform/blob/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/getproviders/reattach/reattach.go#L41-L77","documentation":"Thrown while building the reattach map when a JSON object key (the provider source string) cannot be parsed by addrs.ParseProviderSourceString. Provider keys must follow the [hostname/]namespace/name form.","triggerScenarios":"addrs.ParseProviderSourceString(p).HasErrors() is true for the map key p (e.g. 'aws', 'hashicorp/aws/extra', or a string with illegal characters).","commonSituations":"Key written as a bare provider name without a namespace; extra path segments; typo such as 'hashcrop/aws'; slashes or characters illegal in a provider address.","solutions":["Use the full three-part form 'registry.terraform.io/hashicorp/aws' or at minimum 'hashicorp/aws'","Remove extra segments and illegal characters from the key","Cross-check the key against the provider's published source address"],"exampleFix":"// before: {\"aws\": {...}}\n// after : {\"registry.terraform.io/hashicorp/aws\": {...}}","handlingStrategy":"validation","validationCode":"// Validate each provider key is a parseable provider address.\nfor k := range m {\n    if _, diags := addrs.ParseProviderSourceString(k); diags.HasErrors() {\n        return fmt.Errorf(\"reattach key %q is not a valid provider address\", k)\n    }\n}","typeGuard":"func IsValidProviderSource(s string) bool {\n    _, diags := addrs.ParseProviderSourceString(s)\n    return !diags.HasErrors()\n}","tryCatchPattern":"providers, err := reattach.DecodeProviders(raw)\nif err != nil && strings.Contains(err.Error(), \"provider address\") {\n    return fmt.Errorf(\"a reattach key must be '<hostname>/<ns>/<name>' or '<ns>/<name>': %w\", err)\n}","preventionTips":["Always use the full 'registry.terraform.io/namespace/name' form for reattach keys","Avoid bare provider names like 'aws' which lack a namespace"],"tags":["reattach","provider-address","validation","config"],"backgroundTag":null,"analyzedSha":"d32a084675427f5ac3f7d2868578ef8b2c1dc525","analyzedAt":"2026-08-11T18:43:52.779Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}