Skip to content

Commit d14343c

Browse files
committed
chore: add structuredreporting for sqlinstance
Hopefully we can move away from hand-coding here.
1 parent fb8571e commit d14343c

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

pkg/controller/direct/sql/sqlinstance_controller.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/direct/directbase"
3434
"github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/direct/registry"
3535
"github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
36+
"github.com/GoogleCloudPlatform/k8s-config-connector/pkg/structuredreporting"
3637
"github.com/googleapis/gax-go/v2"
3738
)
3839

@@ -234,6 +235,13 @@ func (a *sqlInstanceAdapter) Update(ctx context.Context, updateOp *directbase.Up
234235
newVersionDb := &api.DatabaseInstance{
235236
DatabaseVersion: direct.ValueOf(a.desired.Spec.DatabaseVersion),
236237
}
238+
239+
{
240+
report := &structuredreporting.Diff{}
241+
report.AddField(".databaseVersion", a.actual.DatabaseVersion, a.desired.Spec.DatabaseVersion)
242+
structuredreporting.ReportDiff(ctx, report)
243+
}
244+
237245
op, err := a.sqlInstancesClient.Patch(a.projectID, a.resourceID, newVersionDb).Context(ctx).Do()
238246
if err != nil {
239247
return fmt.Errorf("patching SQLInstance %s version failed: %w", a.resourceID, err)
@@ -263,6 +271,13 @@ func (a *sqlInstanceAdapter) Update(ctx context.Context, updateOp *directbase.Up
263271
Tier: a.desired.Spec.Settings.Tier,
264272
},
265273
}
274+
275+
{
276+
report := &structuredreporting.Diff{}
277+
report.AddField(".settings.edition", a.actual.Settings.Edition, a.desired.Spec.Settings)
278+
structuredreporting.ReportDiff(ctx, report)
279+
}
280+
266281
op, err := a.sqlInstancesClient.Patch(a.projectID, a.resourceID, newEditionDb).Context(ctx).Do()
267282
if err != nil {
268283
return fmt.Errorf("patching SQLInstance %s edition failed: %w", a.resourceID, err)
@@ -287,9 +302,15 @@ func (a *sqlInstanceAdapter) Update(ctx context.Context, updateOp *directbase.Up
287302
return err
288303
}
289304

290-
if !InstancesMatch(desiredGCP, a.actual) {
305+
if !InstancesMatch(ctx, desiredGCP, a.actual) {
291306
updateOp.RecordUpdatingEvent()
292307

308+
{
309+
report := &structuredreporting.Diff{}
310+
report.AddField("[instance]", a.actual, desiredGCP)
311+
structuredreporting.ReportDiff(ctx, report)
312+
}
313+
293314
op, err := a.sqlInstancesClient.Update(a.projectID, desiredGCP.Name, desiredGCP).Context(ctx).Do()
294315
if err != nil {
295316
return fmt.Errorf("updating SQLInstance %s failed: %w", desiredGCP.Name, err)

pkg/controller/direct/sql/sqlinstance_equality.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,63 @@
1515
package sql
1616

1717
import (
18+
"context"
1819
"reflect"
1920
"sort"
2021

2122
api "google.golang.org/api/sqladmin/v1beta4"
23+
"sigs.k8s.io/controller-runtime/pkg/log"
2224
)
2325

24-
func InstancesMatch(desired *api.DatabaseInstance, actual *api.DatabaseInstance) bool {
26+
func InstancesMatch(ctx context.Context, desired *api.DatabaseInstance, actual *api.DatabaseInstance) bool {
27+
log := log.FromContext(ctx)
28+
2529
if desired == nil && actual == nil {
2630
return true
2731
}
2832
if !PointersMatch(desired, actual) {
2933
return false
3034
}
3135
if desired.DatabaseVersion != actual.DatabaseVersion {
36+
log.Info("mismatch on field DatabaseVersion", "desired", desired.DatabaseVersion, "actual", actual.DatabaseVersion)
3237
return false
3338
}
3439
if !DiskEncryptionConfigurationsMatch(desired.DiskEncryptionConfiguration, actual.DiskEncryptionConfiguration) {
40+
log.Info("mismatch on field DiskEncryptionConfigurations", "desired", desired.DiskEncryptionConfiguration, "actual", actual.DiskEncryptionConfiguration)
3541
return false
3642
}
3743
// Ignore GeminiConfig. It is not supported in KRM API.
3844
if desired.InstanceType != actual.InstanceType {
45+
log.Info("mismatch on field InstanceType", "desired", desired.InstanceType, "actual", actual.InstanceType)
3946
return false
4047
}
4148
// Ignore Kind. It is sometimes not set in API responses.
4249
if desired.MaintenanceVersion != actual.MaintenanceVersion {
50+
log.Info("mismatch on field MaintenanceVersion", "desired", desired.MaintenanceVersion, "actual", actual.MaintenanceVersion)
4351
return false
4452
}
4553
if desired.MasterInstanceName != actual.MasterInstanceName {
54+
log.Info("mismatch on field MasterInstanceName", "desired", desired.MasterInstanceName, "actual", actual.MasterInstanceName)
4655
return false
4756
}
4857
// Ignore MaxDiskSize. It is not supported in KRM API.
4958
if desired.Name != actual.Name {
59+
log.Info("mismatch on field Name", "desired", desired.Name, "actual", actual.Name)
5060
return false
5161
}
5262
// Ignore OnPremisesConfiguration. It is not supported in KRM API.
5363
if desired.Region != actual.Region {
64+
log.Info("mismatch on field Region", "desired", desired.Region, "actual", actual.Region)
5465
return false
5566
}
5667
if !ReplicaConfigurationsMatch(desired.ReplicaConfiguration, actual.ReplicaConfiguration) {
68+
log.Info("mismatch on field ReplicaConfigurations", "desired", desired.ReplicaConfiguration, "actual", actual.ReplicaConfiguration)
5769
return false
5870
}
5971
// Ignore ReplicationCluster. It is not supported in KRM API.
6072
// Ignore RootPassword. It is not exported.
6173
if !SettingsMatch(desired.Settings, actual.Settings) {
74+
log.Info("mismatch on field Settings", "desired", desired.Settings, "actual", actual.Settings)
6275
return false
6376
}
6477
// Ignore SqlNetworkArchitecture. It is not supported in KRM API.

pkg/structuredreporting/diffs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ type DiffField struct {
3939
New any
4040
}
4141

42+
// AddField adds the data for a changed field
43+
func (d *Diff) AddField(id string, old any, new any) {
44+
d.Fields = append(d.Fields, DiffField{ID: id, Old: old, New: new})
45+
}
46+
4247
// ReportDiff should be called by a controller when it detects diffs
4348
func ReportDiff(ctx context.Context, diff *Diff) {
4449
if listener, ok := GetListenerFromContext(ctx); ok {

0 commit comments

Comments
 (0)