From 49f088a32dbc7c3dc6c719923c8252102e1b1f92 Mon Sep 17 00:00:00 2001 From: nithyatsu Date: Fri, 3 Jan 2025 15:24:58 -0800 Subject: [PATCH] add a registerType function --- pkg/cli/manifest/registermanifest.go | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/pkg/cli/manifest/registermanifest.go b/pkg/cli/manifest/registermanifest.go index 9ac98c6d7f..c605cfdc38 100644 --- a/pkg/cli/manifest/registermanifest.go +++ b/pkg/cli/manifest/registermanifest.go @@ -161,6 +161,68 @@ func RegisterDirectory(ctx context.Context, clientFactory *v20231001preview.Clie return nil } +// RegisterType registers a type specified in a manifest file +func RegisterType(ctx context.Context, clientFactory *v20231001preview.ClientFactory, planeName string, filePath string, typeName string, logger func(format string, args ...any)) error { + // Check for valid file path + if filePath == "" { + return fmt.Errorf("invalid manifest file path") + } + + // Read the manifest file + resourceProvider, err := ReadFile(filePath) + if err != nil { + return err + } + + // Check if the type exists in the manifest file + resourceType, ok := resourceProvider.Types[typeName] + if !ok { + return fmt.Errorf("type %s not found in manifest file %s", typeName, filePath) + } + + logIfEnabled(logger, "Creating resource type %s/%s", resourceProvider.Name, typeName) + resourceTypePoller, err := clientFactory.NewResourceTypesClient().BeginCreateOrUpdate(ctx, planeName, resourceProvider.Name, typeName, v20231001preview.ResourceTypeResource{ + Properties: &v20231001preview.ResourceTypeProperties{ + DefaultAPIVersion: resourceProvider.Types[typeName].DefaultAPIVersion, + }, + }, nil) + if err != nil { + return err + } + + _, err = resourceTypePoller.PollUntilDone(ctx, nil) + if err != nil { + return err + } + + // get the existing location resource and update it + locationResourceGetResponse, err := clientFactory.NewLocationsClient().Get(ctx, planeName, resourceProvider.Name, v1.LocationGlobal, nil) + if err != nil { + return err + } + + locationResource := locationResourceGetResponse.LocationResource + locationResource.Properties.ResourceTypes[typeName] = &v20231001preview.LocationResourceType{ + APIVersions: map[string]map[string]any{ + *resourceType.DefaultAPIVersion: {}, + }, + } + + //set it back to resource provider + logIfEnabled(logger, "Updating location %s/%s", resourceProvider.Name, v1.LocationGlobal) + locationPoller, err := clientFactory.NewLocationsClient().BeginCreateOrUpdate(ctx, planeName, resourceProvider.Name, v1.LocationGlobal, locationResource, nil) + if err != nil { + return err + } + + _, err = locationPoller.PollUntilDone(ctx, nil) + if err != nil { + return err + } + + return nil +} + // Define an optional logger to prevent nil pointer dereference func logIfEnabled(logger func(format string, args ...any), format string, args ...any) { if logger != nil {