Просмотр исходного кода

fix kubernetes v2 check-diff issues

Signed-off-by: Moritz Johner <beller.moritz@googlemail.com>
Moritz Johner 2 месяцев назад
Родитель
Сommit
1a5d91b9a6

+ 30 - 26
providers/v2/hack/generate-provider-main.go

@@ -37,32 +37,36 @@ import (
 //go:embed schema/provider-config.schema.json templates/*.tmpl
 var embeddedFS embed.FS
 
+type providerMetadata struct {
+	Name        string `yaml:"name"        json:"name"`
+	DisplayName string `yaml:"displayName" json:"displayName"`
+	V2Package   string `yaml:"v2Package"   json:"v2Package"`
+}
+
+type gvkConfig struct {
+	Group   string `yaml:"group"   json:"group"`
+	Version string `yaml:"version" json:"version"`
+	Kind    string `yaml:"kind"    json:"kind"`
+}
+
+type storeConfig struct {
+	GVK            gvkConfig `yaml:"gvk"            json:"gvk"`
+	V1Provider     string    `yaml:"v1Provider"     json:"v1Provider"`
+	V1ProviderFunc string    `yaml:"v1ProviderFunc" json:"v1ProviderFunc"`
+}
+
+type generatorConfig struct {
+	GVK             gvkConfig `yaml:"gvk"             json:"gvk"`
+	V1Generator     string    `yaml:"v1Generator"     json:"v1Generator"`
+	V1GeneratorFunc string    `yaml:"v1GeneratorFunc" json:"v1GeneratorFunc"`
+}
+
 // ProviderConfig represents the structure of provider.yaml.
 type ProviderConfig struct {
-	Provider struct {
-		Name        string `yaml:"name" json:"name"`
-		DisplayName string `yaml:"displayName" json:"displayName"`
-		V2Package   string `yaml:"v2Package" json:"v2Package"`
-	} `yaml:"provider" json:"provider"`
-	Stores []struct {
-		GVK struct {
-			Group   string `yaml:"group" json:"group"`
-			Version string `yaml:"version" json:"version"`
-			Kind    string `yaml:"kind" json:"kind"`
-		} `yaml:"gvk" json:"gvk"`
-		V1Provider     string `yaml:"v1Provider" json:"v1Provider"`
-		V1ProviderFunc string `yaml:"v1ProviderFunc" json:"v1ProviderFunc"`
-	} `yaml:"stores" json:"stores"`
-	Generators []struct {
-		GVK struct {
-			Group   string `yaml:"group" json:"group"`
-			Version string `yaml:"version" json:"version"`
-			Kind    string `yaml:"kind" json:"kind"`
-		} `yaml:"gvk" json:"gvk"`
-		V1Generator     string `yaml:"v1Generator" json:"v1Generator"`
-		V1GeneratorFunc string `yaml:"v1GeneratorFunc" json:"v1GeneratorFunc"`
-	} `yaml:"generators" json:"generators"`
-	ConfigPackage string `yaml:"configPackage" json:"configPackage"`
+	Provider      providerMetadata  `yaml:"provider"      json:"provider"`
+	Stores        []storeConfig     `yaml:"stores"        json:"stores"`
+	Generators    []generatorConfig `yaml:"generators"    json:"generators"`
+	ConfigPackage string            `yaml:"configPackage" json:"configPackage"`
 }
 
 // ImportInfo tracks package imports with aliases.
@@ -230,6 +234,7 @@ func findProviderConfigs(baseDir string) ([]string, error) {
 
 func loadAndValidateConfig(configPath string, schemaLoader gojsonschema.JSONLoader) (*ProviderConfig, error) {
 	// Read YAML file
+	//nolint:gosec // configPath comes from controlled provider config discovery under providers-dir.
 	yamlBytes, err := os.ReadFile(configPath)
 	if err != nil {
 		return nil, fmt.Errorf("read file: %w", err)
@@ -357,7 +362,7 @@ func generateImportAlias(importPath string, seenImports map[string]int) string {
 	return lastPart
 }
 
-func executeTemplate(tmpl *template.Template, data interface{}) ([]byte, error) {
+func executeTemplate(tmpl *template.Template, data any) ([]byte, error) {
 	var buf bytes.Buffer
 	if err := tmpl.Execute(&buf, data); err != nil {
 		return nil, err
@@ -394,4 +399,3 @@ func formatGoCode(code []byte) ([]byte, error) {
 
 	return out.Bytes(), nil
 }
-

+ 17 - 0
providers/v2/hack/go.sum

@@ -1,13 +1,25 @@
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -15,7 +27,12 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
 github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
+go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ=
+go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
+google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
+google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 24 - 16
providers/v2/kubernetes/config_test.go

@@ -28,20 +28,28 @@ import (
 	pb "github.com/external-secrets/external-secrets/proto/provider"
 )
 
+const (
+	testBackendName                = "backend"
+	testSourceRemoteNamespace      = "remote-from-source-namespace"
+	testProviderConfigNamespace    = "provider-config-ns"
+	testProviderRefRemoteNamespace = "remote-from-provider-ref"
+	testManifestSourceNamespace    = "tenant-a"
+)
+
 func TestGetSpecMapperUsesProviderRefNamespaceBeforeSourceNamespace(t *testing.T) {
 	scheme := runtime.NewScheme()
 	utilruntime.Must(v1.AddToScheme(scheme))
 	utilruntime.Must(k8sv2alpha1.AddToScheme(scheme))
 
 	referenced := &k8sv2alpha1.Kubernetes{}
-	referenced.Name = "backend"
-	referenced.Namespace = "provider-config-ns"
-	referenced.Spec.RemoteNamespace = "remote-from-provider-ref"
+	referenced.Name = testBackendName
+	referenced.Namespace = testProviderConfigNamespace
+	referenced.Spec.RemoteNamespace = testProviderRefRemoteNamespace
 
 	fallback := &k8sv2alpha1.Kubernetes{}
-	fallback.Name = "backend"
-	fallback.Namespace = "tenant-a"
-	fallback.Spec.RemoteNamespace = "remote-from-source-namespace"
+	fallback.Name = testBackendName
+	fallback.Namespace = testManifestSourceNamespace
+	fallback.Spec.RemoteNamespace = testSourceRemoteNamespace
 
 	kubeClient := fakeclient.NewClientBuilder().
 		WithScheme(scheme).
@@ -51,9 +59,9 @@ func TestGetSpecMapperUsesProviderRefNamespaceBeforeSourceNamespace(t *testing.T
 	mapper := GetSpecMapper(kubeClient)
 
 	spec, err := mapper(&pb.ProviderReference{
-		Name:      "backend",
-		Namespace: "provider-config-ns",
-	}, "tenant-a")
+		Name:      testBackendName,
+		Namespace: testProviderConfigNamespace,
+	}, testManifestSourceNamespace)
 	if err != nil {
 		t.Fatalf("mapper() error = %v", err)
 	}
@@ -61,7 +69,7 @@ func TestGetSpecMapperUsesProviderRefNamespaceBeforeSourceNamespace(t *testing.T
 	if spec.Provider == nil || spec.Provider.Kubernetes == nil {
 		t.Fatalf("expected kubernetes provider spec, got %#v", spec.Provider)
 	}
-	if spec.Provider.Kubernetes.RemoteNamespace != "remote-from-provider-ref" {
+	if spec.Provider.Kubernetes.RemoteNamespace != testProviderRefRemoteNamespace {
 		t.Fatalf("expected provider-ref namespace object, got %#v", spec.Provider.Kubernetes)
 	}
 }
@@ -72,9 +80,9 @@ func TestGetSpecMapperFallsBackToSourceNamespace(t *testing.T) {
 	utilruntime.Must(k8sv2alpha1.AddToScheme(scheme))
 
 	fallback := &k8sv2alpha1.Kubernetes{}
-	fallback.Name = "backend"
-	fallback.Namespace = "tenant-a"
-	fallback.Spec.RemoteNamespace = "remote-from-source-namespace"
+	fallback.Name = testBackendName
+	fallback.Namespace = testManifestSourceNamespace
+	fallback.Spec.RemoteNamespace = testSourceRemoteNamespace
 
 	kubeClient := fakeclient.NewClientBuilder().
 		WithScheme(scheme).
@@ -84,8 +92,8 @@ func TestGetSpecMapperFallsBackToSourceNamespace(t *testing.T) {
 	mapper := GetSpecMapper(kubeClient)
 
 	spec, err := mapper(&pb.ProviderReference{
-		Name: "backend",
-	}, "tenant-a")
+		Name: testBackendName,
+	}, testManifestSourceNamespace)
 	if err != nil {
 		t.Fatalf("mapper() error = %v", err)
 	}
@@ -93,7 +101,7 @@ func TestGetSpecMapperFallsBackToSourceNamespace(t *testing.T) {
 	if spec.Provider == nil || spec.Provider.Kubernetes == nil {
 		t.Fatalf("expected kubernetes provider spec, got %#v", spec.Provider)
 	}
-	if spec.Provider.Kubernetes.RemoteNamespace != "remote-from-source-namespace" {
+	if spec.Provider.Kubernetes.RemoteNamespace != testSourceRemoteNamespace {
 		t.Fatalf("expected source namespace object, got %#v", spec.Provider.Kubernetes)
 	}
 }