diff --git a/Makefile b/Makefile index 727fa6ce0b93..2b1d38f66a5d 100644 --- a/Makefile +++ b/Makefile @@ -367,6 +367,7 @@ export FAKE_MODULE rm -f .make/prepublish_go rm -rf $$(find sdk/pulumi-azure-native-sdk -mindepth 1 -maxdepth 1 ! -name ".git") bin/$(CODEGEN) go + echo "Go version.txt: $$(cat sdk/pulumi-azure-native-sdk/version.txt)" @# Tidy up all go.mod files find sdk/pulumi-azure-native-sdk -type d -maxdepth 1 -exec sh -c "cd \"{}\" && go mod tidy" \; @touch $@ diff --git a/provider/cmd/pulumi-gen-azure-native/main.go b/provider/cmd/pulumi-gen-azure-native/main.go index 84ea241b2da1..0c1f472cb28b 100644 --- a/provider/cmd/pulumi-gen-azure-native/main.go +++ b/provider/cmd/pulumi-gen-azure-native/main.go @@ -241,6 +241,7 @@ func emitSplitPackage(pkgSpec *schema.PackageSpec, language, outDir string) erro } version := gen.GoModVersion(ppkg.Version) + fmt.Printf("Go version %s calculated from %s\n", version, ppkg.Version) files, err := gogen.GeneratePackage("the Pulumi SDK Generator", ppkg, nil) if err != nil { return errors.Wrapf(err, "generating %s package", language) diff --git a/provider/pkg/provider/provider.go b/provider/pkg/provider/provider.go index 666ad4ea69a6..0a75e9509346 100644 --- a/provider/pkg/provider/provider.go +++ b/provider/pkg/provider/provider.go @@ -259,10 +259,13 @@ func (k *azureNativeProvider) Configure(ctx context.Context, return nil, fmt.Errorf("creating Azure client: %w", err) } - k.customResources, err = customresources.BuildCustomResources(&k.environment, k.azureClient, k.LookupResource, k.newCrudClient, k.subscriptionID, - resourceManagerBearerAuth, resourceManagerAuth, keyVaultBearerAuth, userAgent, credential) - if err != nil { - return nil, fmt.Errorf("initializing custom resources: %w", err) + // When the provider is parameterized, resources and types that custom resources are built on will probably not be available. + if !k.isParameterized() { + k.customResources, err = customresources.BuildCustomResources(&k.environment, k.azureClient, k.LookupResource, k.newCrudClient, k.subscriptionID, + resourceManagerBearerAuth, resourceManagerAuth, keyVaultBearerAuth, userAgent, credential) + if err != nil { + return nil, fmt.Errorf("initializing custom resources: %w", err) + } } k.skipReadOnUpdate = k.getConfig("skipReadOnUpdate", "ARM_SKIP_READ_ON_UPDATE") == "true" @@ -273,6 +276,10 @@ func (k *azureNativeProvider) Configure(ctx context.Context, }, nil } +func (k *azureNativeProvider) isParameterized() bool { + return strings.HasPrefix(k.name, "azure-native"+parameterizedNameSeparator) +} + func (k *azureNativeProvider) newAzureClient(armAuth autorest.Authorizer, tokenCred azcore.TokenCredential, userAgent string) (azure.AzureClient, error) { if util.EnableAzcoreBackend() { logging.V(9).Infof("AzureClient: using azcore and azidentity") diff --git a/provider/pkg/provider/provider_parameterize.go b/provider/pkg/provider/provider_parameterize.go index 25cec67df854..8aa86442ad3e 100644 --- a/provider/pkg/provider/provider_parameterize.go +++ b/provider/pkg/provider/provider_parameterize.go @@ -171,6 +171,12 @@ func (p *azureNativeProvider) Parameterize(ctx context.Context, req *rpc.Paramet return resp, nil } +const parameterizedNameSeparator = "_" + +func generateNewPackageName(unparameterizedPackageName, targetModule, targetApiVersion string) string { + return strings.Join([]string{unparameterizedPackageName, targetModule, targetApiVersion}, parameterizedNameSeparator) +} + // createParameterizedSchemaForApiVersion creates a new schema for the given module and API version by picking the // required resources, types, and functions from the providers existing schema and metadata. This assumes that the given // provider has a full schema with all API versions. @@ -184,7 +190,7 @@ func (p *azureNativeProvider) Parameterize(ctx context.Context, req *rpc.Paramet // To separate concerns, the `Parameterization` of the new schema is NOT populated yet, the caller is responsible for // doing that. func createSchema(p *azureNativeProvider, schema pschema.PackageSpec, targetModule, targetApiVersion string) (*pschema.PackageSpec, *resources.APIMetadata, error) { - newPackageName := fmt.Sprintf("%s_%s_%s", schema.Name, targetModule, targetApiVersion) // "." is not allowed + newPackageName := generateNewPackageName(schema.Name, targetModule, targetApiVersion) newSchema := pschema.PackageSpec{ Name: newPackageName, diff --git a/provider/pkg/provider/provider_test.go b/provider/pkg/provider/provider_test.go index 9980933c342d..e142b6a97fc0 100644 --- a/provider/pkg/provider/provider_test.go +++ b/provider/pkg/provider/provider_test.go @@ -874,3 +874,26 @@ func TestProviderDiff(t *testing.T) { }) } } + +func TestIsParameterized(t *testing.T) { + t.Run("parameterized", func(t *testing.T) { + provider := &azureNativeProvider{ + name: generateNewPackageName("azure-native", "aad", "v20221201"), + } + assert.True(t, provider.isParameterized()) + }) + + t.Run("not parameterized", func(t *testing.T) { + provider := &azureNativeProvider{ + name: "azure-native", + } + assert.False(t, provider.isParameterized()) + }) + + t.Run("unexpected format", func(t *testing.T) { + provider := &azureNativeProvider{ + name: "azure-native-aad-parameterized", + } + assert.False(t, provider.isParameterized()) + }) +}