pulumi/sdk/go
Ian Wahbe 87b525f040
[sdk/go] Fix await for values containing resources (#9106)
When traversing a value in `awaitInputs`, terminate early if the value
is a `Resource`. Furthermore, do not include these values in the set of
dependencies for the result of the corresponding call to `ToOutput` for
consistency with other SDKs.

Note that the logic for `awaitInputs` is a bit arcane. With these
changes, it roughly boils down to:

1. If the value to await is an Input:
    a. If the value is `nil`, do nothing. The value is already
       fully-resolved.
    b. Otherwise, convert the Input to an appropriately-typed Output by
       calling the corresponding `ToOutput` method. The desired type is
       determined based on the type of the destination, and the
       conversion method is determined from the name of the desired
       type. If no conversion method is available, we will attempt to
       assign the Input itself, and will panic if that assignment is not
       well-typed.
    c. Replace the value to await with the resolved value of the input.
2. Depending on the kind of the value:
    a. If the value is a Resource, stop. This is the condition added by
       this PR.
    b. If the value is a primitive, stop.
    c. If the value is a slice, array, struct, or map, recur on its contents.

Fixes #9008.

Co-authored-by: Pat Gavlin <pat@pulumi.com>
2022-05-02 13:36:29 -07:00
..
auto Fix race condition in reading EngineEvents from tailed logs (#9467) 2022-04-25 17:26:01 +01:00
common [diff] Handle YAML maps with numeric keys. (#9503) 2022-05-02 12:11:46 -07:00
pulumi [sdk/go] Fix await for values containing resources (#9106) 2022-05-02 13:36:29 -07:00
pulumi-language-go Move InstallDependencies to the language plugin (#9294) 2022-04-03 15:54:59 +01:00
Makefile Makefiles are very whitespace sensitive (#9301) 2022-03-26 09:00:21 +00:00
README.md `pulumi update` => `pulumi up` (#2702) 2019-05-06 14:00:18 -07:00

README.md

Pulumi Golang SDK

This directory contains support for writing Pulumi programs in the Go language. There are two aspects to this:

  • pulumi/ contains the client language bindings Pulumi program's code directly against;
  • pulumi-language-go/ contains the language host plugin that the Pulumi engine uses to orchestrate updates.

To author a Pulumi program in Go, simply say so in your Pulumi.yaml

name: <my-project>
runtime: go

and ensure you have pulumi-language-go on your path (it is distributed in the Pulumi download automatically).

By default, the language plugin will use your project's name, <my-project>, as the executable that it loads. This too must be on your path for the language provider to load it when you run pulumi preview or pulumi up.