mirror of https://github.com/pulumi/pulumi.git
2 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
Zaid Ajaj |
b4c00f7e30
|
[go/program-gen] Fix union type type resolution in Go program generation (#16297)
# Description Fixes https://github.com/pulumi/pulumi-azure-native/issues/1554 ### Context The problem here is that when we compute `InputType: model.Type` in `pcl.Resource`, we map the types of input properties of resources from `schema.Type` into `model.Type`. When one of these properties is a `schema.UnionType` (union of objects to be exact), we map that _as is_ to `model.UnionType` which trips up Go program-gen as it doesn't know how to reduce the type to the actual _selected_ object type based on the resource inputs. ### Resolution The way to fix this is not in Go program-gen, instead we _reduce_ the computed union types during the binding phase into the actual object types based on the resource inputs so that all program generators only work against explicit objects rather than having to deal with unions of objects ### Example: ```pcl resource "example" "azure-native:eventgrid:EventSubscription" { destination = { endpointType = "EventHub" resourceId = "example" } expirationTimeUtc = "example" scope = "example" } ``` Before: ```go pulumi.Run(func(ctx *pulumi.Context) error { _, err := eventgrid.NewEventSubscription(ctx, "example", &eventgrid.EventSubscriptionArgs{ Destination: eventgrid.EventHubEventSubscriptionDestination{ EndpointType: "EventHub", ResourceId: "example", }, ExpirationTimeUtc: pulumi.String("example"), Scope: pulumi.String("example"), }) if err != nil { return err } return nil }) ``` After: ```go pulumi.Run(func(ctx *pulumi.Context) error { _, err := eventgrid.NewEventSubscription(ctx, "example", &eventgrid.EventSubscriptionArgs{ Destination: &eventgrid.EventHubEventSubscriptionDestinationArgs{ EndpointType: pulumi.String("EventHub"), ResourceId: pulumi.String("example"), }, ExpirationTimeUtc: pulumi.String("example"), Scope: pulumi.String("example"), }) if err != nil { return err } return nil }) ``` ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |
|
Zaid Ajaj |
3207e19983
|
[go/program-gen] Implement importPathPattern in Go language options to override emitted paths in generated Go programs (#16267)
# Description Partially addressing https://github.com/pulumi/pulumi-azure-native/issues/3308 Implementing a new go language option called `importPathPattern` which can be used to override how the base import path and modules are concatenated to create imports in generated Go programs. By convention this used to be `{baseImportPath}/{module}` which has worked for all of our providers. However, azure-native v2 has introduced a new import scheme where the convention above causes incorrect import paths to be generated. This is where `importPathPattern` comes into play and allows for a different convention. In the case the of azure-native v2, the pattern _must_ be `github.com/pulumi/pulumi-azure-native-sdk/{module}/v2`. This PR implements `importPathPattern` and tests it using a squashed down azure-native v2 schema containing only contents from the `eventgrid` module. This schema sets the option like this: ```json "importPathPattern": "github.com/pulumi/pulumi-azure-native-sdk/{module}/v2" ``` This schema also modifies `packageImportAliases` from the current azure-native v2 schema to exclude /v2 before the module path (see the file below). This change is needed in the actual azure-native v2 provider cc @danielrbradley and it is the second part of fully fixing https://github.com/pulumi/pulumi-azure-native/issues/3308 > We cannot just use `{baseImportPath}/{module}` because the base import path for azure-native v2 has a suffix v2 (it's required) Also implemented a small feature in ProgramTest to allow overriding the used plugin host for the specific program test, this is because I wanted to test the program against the simplified azure-native v2 schema without changing how other test load the previous azure-native v1.x schemas (I tested that without this, binding programs fails) ## Checklist - [ ] I have run `make tidy` to update any new dependencies - [x] I have run `make lint` to verify my code passes the lint check - [x] I have formatted my code using `gofumpt` <!--- Please provide details if the checkbox below is to be left unchecked. --> - [ ] I have added tests that prove my fix is effective or that my feature works <!--- User-facing changes require a CHANGELOG entry. --> - [x] I have run `make changelog` and committed the `changelog/pending/<file>` documenting my change <!-- If the change(s) in this PR is a modification of an existing call to the Pulumi Cloud, then the service should honor older versions of the CLI where this change would not exist. You must then bump the API version in /pkg/backend/httpstate/client/api.go, as well as add it to the service. --> - [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Cloud API version <!-- @Pulumi employees: If yes, you must submit corresponding changes in the service repo. --> |