diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c5f3e44f..925ba7af0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ CHANGELOG ## HEAD (unreleased) +- Fix infinite recursion bug for Go SDK + [#4516](https://github.com/pulumi/pulumi/pull/4516) + - Order secretOutputNames when used in stack references [#4489](https://github.com/pulumi/pulumi/pull/4489) diff --git a/sdk/go/pulumi/types.go b/sdk/go/pulumi/types.go index 76b4941e5..14441baaa 100644 --- a/sdk/go/pulumi/types.go +++ b/sdk/go/pulumi/types.go @@ -454,6 +454,8 @@ func gatherDependencies(v interface{}) []Resource { return deps } +var resourceType = reflect.TypeOf((*Resource)(nil)).Elem() + func gatherDependencySet(v reflect.Value, deps map[Resource]struct{}) { for { // Check for an Output that we can pull dependencies off of. @@ -464,6 +466,14 @@ func gatherDependencySet(v reflect.Value, deps map[Resource]struct{}) { } return } + // Check for an actual Resource. + if v.Type().Implements(resourceType) { + if v.CanInterface() { + resource := v.Convert(resourceType).Interface().(Resource) + deps[resource] = struct{}{} + } + return + } switch v.Kind() { case reflect.Interface, reflect.Ptr: