v2/api/dbforpostgresql/customizations/flexible_servers_database_extensions.go (55 lines of code) (raw):
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT license.
*/
package customizations
import (
"context"
"fmt"
"github.com/go-logr/logr"
api "github.com/Azure/azure-service-operator/v2/api/dbforpostgresql/v1api20240801"
hub "github.com/Azure/azure-service-operator/v2/api/dbforpostgresql/v1api20240801/storage"
"github.com/Azure/azure-service-operator/v2/internal/genericarmclient"
"github.com/Azure/azure-service-operator/v2/internal/resolver"
"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
"github.com/Azure/azure-service-operator/v2/pkg/genruntime/extensions"
)
var _ extensions.PreReconciliationChecker = &FlexibleServersDatabaseExtension{}
func (extension *FlexibleServersDatabaseExtension) PreReconcileCheck(
ctx context.Context,
obj genruntime.MetaObject,
owner genruntime.MetaObject,
resourceResolver *resolver.Resolver,
armClient *genericarmclient.GenericClient,
log logr.Logger,
next extensions.PreReconcileCheckFunc,
) (extensions.PreReconcileCheckResult, error) {
// Check to see if our owning server is ready for the database to be reconciled
// Owner nil can happen if the server owner of the database is referenced by armID
if owner != nil {
if server, ok := owner.(*hub.FlexibleServer); ok {
serverState := server.Status.State
if serverState != nil && flexibleServerStateBlocksReconciliation(*serverState) {
return extensions.BlockReconcile(
fmt.Sprintf(
"Owning FlexibleServer is in provisioning state %q",
*serverState)), nil
}
}
}
return next(ctx, obj, owner, resourceResolver, armClient, log)
}
var _ extensions.Importer = &FlexibleServersDatabaseExtension{}
// Import skips databases that can't be managed by ARM
func (extension *FlexibleServersDatabaseExtension) Import(
ctx context.Context,
rsrc genruntime.ImportableResource,
owner *genruntime.ResourceReference,
next extensions.ImporterFunc,
) (extensions.ImportResult, error) {
// If this cast doesn't compile, update the `api` import to reference the now latest
// stable version of the dbforpostgresql group (this will happen when we import a new
// API version in the generator.)
if server, ok := rsrc.(*api.FlexibleServersDatabase); ok {
if server.Spec.AzureName == "azure_maintenance" {
return extensions.ImportSkipped("azure_maintenance database is not accessible by users"), nil
}
if server.Spec.AzureName == "azure_sys" {
return extensions.ImportSkipped("built in databases cannot be managed by ARM"), nil
}
if server.Spec.AzureName == "postgres" {
return extensions.ImportSkipped("built in databases cannot be managed by ARM"), nil
}
}
return next(ctx, rsrc, owner)
}