Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 $@
Expand Down
1 change: 1 addition & 0 deletions provider/cmd/pulumi-gen-azure-native/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 11 additions & 4 deletions provider/pkg/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Comment thread
thomas11 marked this conversation as resolved.
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"
Expand All @@ -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")
Expand Down
8 changes: 7 additions & 1 deletion provider/pkg/provider/provider_parameterize.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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,
Expand Down
23 changes: 23 additions & 0 deletions provider/pkg/provider/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
})
}