Overview
Migrate KMS key reference(s) from the legacy unstructured refs.KMSCryptoKeyRef (apis/refs/v1beta1.KMSCryptoKeyRef) to the typed kmsv1beta1.KMSCryptoKeyRef (apis/kms/v1beta1.KMSCryptoKeyRef), and ensure common.NormalizeReferences is called during controller reconciliation.
Problem Description
-
Missing refs.Ref interface implementation:
The current API definitions in apis/spanner/v1beta1/spannerbackupschedule_types.go and apis/spanner/v1alpha1/spannerbackupschedule_types.go use *refs.KMSCryptoKeyRef for spec.encryptionConfig.kmsKeyRef and []*refs.KMSCryptoKeyRef for spec.encryptionConfig.kmsKeyRefs. These legacy reference types do not implement the refs.Ref interface and cannot be automatically resolved by KCC's reference normalization mechanism.
-
Missing reference normalization in controller:
In pkg/controller/direct/spanner/spannerbackupschedule_controller.go, AdapterForObject does not invoke common.NormalizeReferences(ctx, reader, obj, nil). As a result, references configured via name or namespace (instead of explicit external string) are not resolved to their canonical GCP external format before constructing desired GCP API protos, leading to reconciliation errors or diff discrepancies.
Proposed Changes
-
Update API Types:
-
Update Direct Controller:
-
Regenerate Code & CRDs:
- Run
dev/tasks/generate-types-and-mappers (and make fmt).
-
Testing:
- Verify existing tests pass and add/update test cases referencing KMS keys to ensure reference resolution works as expected.
Affected Files & Fields
Overview
Migrate KMS key reference(s) from the legacy unstructured
refs.KMSCryptoKeyRef(apis/refs/v1beta1.KMSCryptoKeyRef) to the typedkmsv1beta1.KMSCryptoKeyRef(apis/kms/v1beta1.KMSCryptoKeyRef), and ensurecommon.NormalizeReferencesis called during controller reconciliation.Problem Description
Missing
refs.Refinterface implementation:The current API definitions in
apis/spanner/v1beta1/spannerbackupschedule_types.goandapis/spanner/v1alpha1/spannerbackupschedule_types.gouse*refs.KMSCryptoKeyRefforspec.encryptionConfig.kmsKeyRefand[]*refs.KMSCryptoKeyRefforspec.encryptionConfig.kmsKeyRefs. These legacy reference types do not implement therefs.Refinterface and cannot be automatically resolved by KCC's reference normalization mechanism.Missing reference normalization in controller:
In
pkg/controller/direct/spanner/spannerbackupschedule_controller.go,AdapterForObjectdoes not invokecommon.NormalizeReferences(ctx, reader, obj, nil). As a result, references configured vianameornamespace(instead of explicitexternalstring) are not resolved to their canonical GCP external format before constructing desired GCP API protos, leading to reconciliation errors or diff discrepancies.Proposed Changes
Update API Types:
apis/spanner/v1beta1/spannerbackupschedule_types.goandapis/spanner/v1alpha1/spannerbackupschedule_types.go:kmsv1beta1 "github.com/GoogleCloudPlatform/k8s-config-connector/apis/kms/v1beta1".KMSKeyReffrom*refs.KMSCryptoKeyRefto*kmsv1beta1.KMSCryptoKeyRef.KMSKeyRefsfrom[]*refs.KMSCryptoKeyRefto[]*kmsv1beta1.KMSCryptoKeyRef.Update Direct Controller:
pkg/controller/direct/spanner/spannerbackupschedule_controller.go:AdapterForObject, invokecommon.NormalizeReferences(ctx, reader, obj, nil)after converting from unstructured and before building the identity/client.Regenerate Code & CRDs:
dev/tasks/generate-types-and-mappers(andmake fmt).Testing:
Affected Files & Fields
SpannerBackupSchedule(spanner.cnrm.cloud.google.com/v1beta1&v1alpha1)apis/spanner/v1beta1/spannerbackupschedule_types.go,apis/spanner/v1alpha1/spannerbackupschedule_types.gopkg/controller/direct/spanner/spannerbackupschedule_controller.gospec.encryptionConfig.kmsKeyRef,spec.encryptionConfig.kmsKeyRefs