mirror of https://github.com/pulumi/pulumi.git
fc26844856
This is a basic proof of concept for using Go generics in our Go SDK. There were a number of "on the fly" design decisions made: * Replace Input altogether. * Keep Output[T], but it needs to be a struct largely due to the lack of generics support in the Go reflection library. * Introduce AnyOutput as a base interface that all Output[*]s implement, which lets us treat any "outputtish" things uniformly. This is enough to get the basic hello, world working: package main import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { var bucket Bucket if err := ctx.RegisterResource("aws:s3/bucket:Bucket", "myBucket", pulumi.Map{}, &bucket); err != nil { return err } ctx.Export("bucketName", bucket.Bucket) nameLength := pulumi.Apply(bucket.Bucket, func(name string) int { return len(name) }) ctx.Export("bucketNameLength", nameLength) return nil }) } There are plenty of embarassing hacks needed to get this to work, and some blatent omissions too. For instance, I doubt Any works, and obviously the tests won't run clean. Nevertheless, I wanted to save/ archive/share this work in the event that it's helpful to someone. |
||
---|---|---|
.. | ||
auto | ||
common | ||
pulumi | ||
pulumi-language-go | ||
Makefile | ||
README.md |
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
.