...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package resourceoverrides
16
17 import (
18 "fmt"
19
20 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
21
22 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
23 apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
24 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
25 )
26
27 var (
28 rrdatasFieldName = "rrdatas"
29 rrdatasRefsFieldName = "rrdatasRefs"
30 )
31
32 func GetDNSRecordSetOverrides() ResourceOverrides {
33 ro := ResourceOverrides{
34 Kind: "DNSRecordSet",
35 }
36
37
38 ro.Overrides = append(ro.Overrides, preserveRrdatasFieldAndEnsureRrdatasRefsFieldIsMultiKind())
39 return ro
40 }
41
42 func preserveRrdatasFieldAndEnsureRrdatasRefsFieldIsMultiKind() ResourceOverride {
43 o := ResourceOverride{}
44 o.CRDDecorate = func(crd *apiextensions.CustomResourceDefinition) error {
45
46 if err := PreserveMutuallyExclusiveNonReferenceField(crd, nil, rrdatasRefsFieldName, rrdatasFieldName); err != nil {
47 return fmt.Errorf("error preserving '%v' field in DNSRecordSet: %w", rrdatasFieldName, err)
48 }
49 if err := EnsureReferenceFieldIsMultiKind(crd, nil, rrdatasRefsFieldName, []string{"ComputeAddress"}); err != nil {
50 return fmt.Errorf("error ensuring '%v' field in DNSRecordSet is a multi-kind reference field: %w", rrdatasRefsFieldName, err)
51 }
52 return nil
53 }
54 o.PreActuationTransform = func(r *k8s.Resource) error {
55 if err := FavorReferenceArrayFieldOverNonReferenceArrayField(r, []string{rrdatasFieldName}, []string{rrdatasRefsFieldName}); err != nil {
56 return fmt.Errorf("error handling '%v' and '%v' fields in pre-actuation transformation: %w", rrdatasFieldName, rrdatasRefsFieldName, err)
57 }
58 return nil
59 }
60 o.PostActuationTransform = func(original, reconciled *k8s.Resource, tfState *terraform.InstanceState, dclState *unstructured.Unstructured) error {
61 if err := PreserveUserSpecifiedLegacyArrayField(original, reconciled, []string{rrdatasFieldName}...); err != nil {
62 return fmt.Errorf("error preserving user-specified '%v' in post-actuation transformation: %w", rrdatasFieldName, err)
63 }
64 if err := PruneDefaultedAuthoritativeArrayFieldIfOnlyLegacyArrayFieldSpecified(original, reconciled, []string{rrdatasFieldName}, []string{rrdatasRefsFieldName}); err != nil {
65 return fmt.Errorf("error conditionally pruning defaulted '%v' in post-actuation transformation: %w", rrdatasRefsFieldName, err)
66 }
67 return nil
68 }
69 return o
70 }
71
View as plain text