{"record":{"id":"b7f3511d697e109e","repo":"hashicorp/packer","slug":"unsupported-dependency-type-q-datasources-can-on","errorCode":null,"errorMessage":"unsupported dependency type %q; datasources can only depend on local, var or data.","messagePattern":"unsupported dependency type %q; datasources can only depend on local, var or data\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hcl2template/types.refstring.go","lineNumber":130,"sourceCode":"\t\tfor _, val := range cfg.InputVariables {\n\t\t\tif val.Name != rs.Name {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn val, nil\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"Unsupported component: %q, only vars, locals and datasources can be fetched by their refString\", rs)\n}\n\nfunc (ds *DatasourceBlock) RegisterDependency(rs refString) error {\n\tswitch rs.MType {\n\tcase \"data\", \"local\":\n\t\tds.Dependencies = append(ds.Dependencies, rs)\n\t// NOOP: vars are always evaluated beforehand for datasources\n\tcase \"var\":\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported dependency type %q; datasources can only depend on local, var or data.\", rs.MType)\n\t}\n\n\treturn nil\n}\n\nfunc (loc *LocalBlock) RegisterDependency(rs refString) error {\n\tswitch rs.MType {\n\tcase \"data\", \"local\":\n\t\tloc.dependencies = append(loc.dependencies, rs)\n\t// NOOP: vars are always evaluated beforehand for locals\n\tcase \"var\":\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported dependency type %q; locals can only depend on local, var or data.\", rs.MType)\n\t}\n\n\treturn nil\n}\n","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/hashicorp/packer/blob/eb36e3c3e48a036f3e8cc94087636ee72e1303c9/hcl2template/types.refstring.go#L112-L148","documentation":"DatasourceBlock.RegisterDependency records which components a datasource depends on so they can be evaluated in order. Only data, local, and var MTypes are accepted (var is a NOOP since vars evaluate first). This error is thrown when a dependency refString has any other MType, meaning the datasource depends on a component kind that cannot participate in datasource dependency ordering.","triggerScenarios":"Calling ds.RegisterDependency with a refString whose MType is not 'data', 'local', or 'var' — e.g. a refString constructed manually with an empty or wrong MType, or a dependency extracted from a traversal rooted at something other than data/local/var.","commonSituations":"Plugin or tooling code building refStrings by hand and leaving MType empty; a refactor introducing a new reference root without updating RegisterDependency; passing a builder or post-processor reference as a datasource dependency.","solutions":["Only pass refStrings created via NewRefString/NewRefStringFromDep rooted at data, local, or var.","Fix the MType on hand-built refStrings to the correct component kind before registering.","If the datasource genuinely depends on another component type, restructure the template — datasources can only order against locals, vars, and other datasources."],"exampleFix":"// before\nrs, _ := NewRefString(\"foo.bar\") // unsupported root\nerr := ds.RegisterDependency(rs)\n// after\nrs, err := NewRefString(\"data.amazon-ami.my_ami\")\nif err != nil { return err }\nerr = ds.RegisterDependency(rs)","handlingStrategy":"validation","validationCode":"// only register dependencies whose MType is data, local or var\nswitch rs.MType {\ncase \"data\", \"local\", \"var\":\n\t// ok to register\ndefault:\n\treturn fmt.Errorf(\"refusing to register dependency %q: unsupported MType\", rs)\n}","typeGuard":"func isRegisterableDependency(rs refString) bool {\n\treturn rs.MType == \"data\" || rs.MType == \"local\" || rs.MType == \"var\"\n}","tryCatchPattern":"if err := ds.RegisterDependency(rs); err != nil {\n\treturn fmt.Errorf(\"bad dependency %s for datasource: %w\", rs, err)\n}","preventionTips":["Construct dependency refStrings only via NewRefString/NewRefStringFromDep so MType is always valid.","Never hand-write refString{MType: \"\"} structs; empty MType hits this default branch.","Keep dependency extraction limited to traversals rooted at data/local/var."],"tags":["hcl2template","datasource","dependency","refstring"],"backgroundTag":"unsupported-dependency-type","analyzedSha":"eb36e3c3e48a036f3e8cc94087636ee72e1303c9","analyzedAt":"2026-09-05T13:20:43.127Z","contentChangedAt":"2026-09-05T13:20:43.127Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}