/
flexible_servers_database_extensions.go
76 lines (63 loc) · 2.36 KB
/
flexible_servers_database_extensions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* 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/v1api20221201"
hub "github.com/Azure/azure-service-operator/v2/api/dbforpostgresql/v1api20221201/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(
_ context.Context,
_ genruntime.MetaObject,
owner genruntime.MetaObject,
_ *resolver.Resolver,
_ *genericarmclient.GenericClient,
_ logr.Logger,
_ extensions.PreReconcileCheckFunc,
) (extensions.PreReconcileCheckResult, error) {
// Check to see if our owning server is ready for the database to be reconciled
if owner == nil {
// TODO: query from ARM instead?
return extensions.ProceedWithReconcile(), 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 extensions.ProceedWithReconcile(), nil
}
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 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)
}