...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package resourceoverrides
16
17 import (
18 "fmt"
19 "strings"
20
21 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
22
23 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
24 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
25 )
26
27 var (
28 projectRefPath = []string{"projectRef", "external"}
29 subnetProjectRefPath = []string{"subnet", "projectRef", "external"}
30 )
31
32 func GetVPCAccessConnectorResourceOverrides() ResourceOverrides {
33 ro := ResourceOverrides{
34 Kind: "VPCAccessConnector",
35 }
36 ro.Overrides = append(ro.Overrides, handleProjectsPrefixInProjectRefExternalFields())
37 return ro
38 }
39
40
41
42
43
44
45 func handleProjectsPrefixInProjectRefExternalFields() ResourceOverride {
46 o := ResourceOverride{}
47 o.PreActuationTransform = func(r *k8s.Resource) error {
48 return removePrefixFromProjectRefExternalFields(r, "pre-actuation")
49 }
50 o.PostActuationTransform = func(original, reconciled *k8s.Resource, tfState *terraform.InstanceState, dclState *unstructured.Unstructured) error {
51 for _, p := range [][]string{projectRefPath, subnetProjectRefPath} {
52 if err := PreserveUserSpecifiedLegacyField(original, reconciled, p...); err != nil {
53 return fmt.Errorf("error preserving field %v in post-actuation transformation: %v", strings.Join(p, "."), err)
54 }
55 }
56 return nil
57 }
58
59
60 o.PostUpdateStatusTransform = func(r *k8s.Resource) error {
61 return removePrefixFromProjectRefExternalFields(r, "post-status update")
62 }
63 return o
64 }
65
66 func removePrefixFromProjectRefExternalFields(r *k8s.Resource, stage string) error {
67 for _, p := range [][]string{projectRefPath, subnetProjectRefPath} {
68 if err := RemovePrefixFromStringFieldInSpec(r, "projects/", p...); err != nil {
69 return fmt.Errorf("error removing 'projects/' prefix from field %v in %s transformation: %v", strings.Join(p, "."), stage, err)
70 }
71 }
72 return nil
73 }
74
View as plain text