{"record":{"id":"8364269f970ff3cd","repo":"pulumi/pulumi","slug":"alias-can-specify-parent-parenturn-or-noparent-bu","errorCode":null,"errorMessage":"alias can specify Parent, ParentURN or NoParent but not more then one","messagePattern":"alias can specify Parent, ParentURN or NoParent but not more then one","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdk/go/pulumi/alias.go","lineNumber":83,"sourceCode":"\tif a.URN != nil {\n\t\treturn a.URN.ToURNOutput(), nil\n\t}\n\n\tn := a.Name\n\tif n == nil {\n\t\tn = String(defaultName)\n\t}\n\tt := a.Type\n\tif t == nil {\n\t\tt = String(defaultType)\n\t}\n\n\tvar parent StringInput = String(\"\")\n\tif defaultParent != nil {\n\t\tparent = defaultParent.URN().ToStringOutput()\n\t}\n\tif multipleTrue(a.Parent != nil, a.ParentURN != nil, a.NoParent != nil) {\n\t\treturn URNOutput{}, errors.New(\"alias can specify Parent, ParentURN or NoParent but not more then one\")\n\t}\n\tif a.Parent != nil {\n\t\tparent = a.Parent.URN().ToStringOutput()\n\t}\n\tif a.ParentURN != nil {\n\t\tparent = a.ParentURN.ToURNOutput()\n\t}\n\tif a.NoParent != nil {\n\t\tparent = All(a.NoParent.ToBoolOutput(), parent).ApplyT(func(a []any) string {\n\t\t\tif a[0].(bool) {\n\t\t\t\treturn \"\"\n\t\t\t}\n\t\t\treturn a[1].(string)\n\t\t}).(StringOutput)\n\t}\n\n\tproject := a.Project\n\tif project == nil {","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/sdk/go/pulumi/alias.go#L65-L101","documentation":"Alias options let you specify an alias's parent in three mutually exclusive ways: Parent (a resource input), ParentURN (a URN input), or NoParent (explicitly opt out). AliasSpec validation via multipleTrue enforces that at most one of these fields is set; setting two or more returns this error instead of guessing which parent applies.","triggerScenarios":"Calling pulumi.Alias{Parent: x, ParentURN: y}, pulumi.Alias{NoParent: pulumi.Bool(true), Parent: x}, or constructing an Alias from config/user input where multiple parent fields got populated simultaneously.","commonSituations":"Migrating code from the old Alias{URN: ...} style where defaults were merged with explicit parents; merging alias config from multiple sources; typo where Parent was set while NoParent remained true.","solutions":["Keep exactly one parent field set: choose Parent, ParentURN, or NoParent and delete the others","If parent comes from configuration, validate/select one before constructing the Alias","Use NoParent only when you explicitly want the alias to have no parent, and never combine it with a parent value"],"exampleFix":"// before\nalias := pulumi.Alias{Parent: parent, NoParent: pulumi.Bool(true)}\n\n// after\nalias := pulumi.Alias{Parent: parent}","handlingStrategy":"validation","validationCode":"func validAlias(a pulumi.Alias) bool {\n\tset := 0\n\tif a.Parent != nil {\n\t\tset++\n\t}\n\tif a.ParentURN != nil {\n\t\tset++\n\t}\n\tif a.NoParent != nil {\n\t\tset++\n\t}\n\treturn set <= 1\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set exactly one of Parent, ParentURN, NoParent","Centralize alias construction in a helper that enforces this","When merging config sources, resolve to one parent field first"],"tags":["go","pulumi","alias","validation"],"backgroundTag":"alias-parent-conflict","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}