From 94af647556bdc159019d7d1ac39572b93d14c0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Bezerra?= Date: Mon, 4 Apr 2022 15:31:59 -0300 Subject: [PATCH 1/2] Add support for remote OpenAPI schema --- api/internal/target/kusttarget.go | 4 +--- api/krusty/kustomizer.go | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/api/internal/target/kusttarget.go b/api/internal/target/kusttarget.go index 5c4733ef0..45e3b8a73 100644 --- a/api/internal/target/kusttarget.go +++ b/api/internal/target/kusttarget.go @@ -6,7 +6,6 @@ package target import ( "encoding/json" "fmt" - "path/filepath" "strings" "github.com/pkg/errors" @@ -478,9 +477,8 @@ func (kt *KustTarget) accumulateDirectory( subKt.kustomization.BuildMetadata = kt.kustomization.BuildMetadata subKt.origin = kt.origin var bytes []byte - path := ldr.Root() if openApiPath, exists := subKt.Kustomization().OpenAPI["path"]; exists { - bytes, err = ldr.Load(filepath.Join(path, openApiPath)) + bytes, err = ldr.Load(openApiPath) if err != nil { return nil, err } diff --git a/api/krusty/kustomizer.go b/api/krusty/kustomizer.go index f2784155f..5f1f27ff2 100644 --- a/api/krusty/kustomizer.go +++ b/api/krusty/kustomizer.go @@ -5,7 +5,6 @@ package krusty import ( "fmt" - "path/filepath" "sigs.k8s.io/kustomize/api/internal/builtins" pLdr "sigs.k8s.io/kustomize/api/internal/plugins/loader" @@ -76,7 +75,7 @@ func (b *Kustomizer) Run( } var bytes []byte if openApiPath, exists := kt.Kustomization().OpenAPI["path"]; exists { - bytes, err = ldr.Load(filepath.Join(ldr.Root(), openApiPath)) + bytes, err = ldr.Load(openApiPath) if err != nil { return nil, err } From d49e5aa5aa34aceb48aced0cabc92df7410a8166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Bezerra?= Date: Wed, 20 Apr 2022 00:03:22 -0300 Subject: [PATCH 2/2] Add tests for remote OpenAPI schema --- .../openapitests/openapicustomschema_test.go | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/api/krusty/openapitests/openapicustomschema_test.go b/api/krusty/openapitests/openapicustomschema_test.go index 91f70cc82..fb196df77 100644 --- a/api/krusty/openapitests/openapicustomschema_test.go +++ b/api/krusty/openapitests/openapicustomschema_test.go @@ -170,6 +170,23 @@ openapi: }) } +func TestCustomOpenApiFieldBasicUsageWithRemoteSchema(t *testing.T) { + runOpenApiTest(t, func(t *testing.T) { + t.Helper() + th := kusttest_test.MakeHarness(t) + th.WriteK(".", ` +resources: +- mycrd.yaml +openapi: + path: https://github.com/kubernetes-sigs/kustomize/raw/master/api/krusty/testdata/customschema.json +`+customSchemaPatch) + writeCustomResource(th, "mycrd.yaml") + writeTestSchema(th, "./") + m := th.Run(".", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, patchedCustomResource) + }) +} + func TestCustomOpenApiFieldWithTwoGvks(t *testing.T) { runOpenApiTest(t, func(t *testing.T) { t.Helper() @@ -303,6 +320,29 @@ resources: }) } +func TestCustomOpenApiFieldFromBaseWithRemoteSchema(t *testing.T) { + runOpenApiTest(t, func(t *testing.T) { + t.Helper() + th := kusttest_test.MakeHarness(t) + th.WriteK("base", ` +resources: +- mycrd.yaml +openapi: + path: https://github.com/kubernetes-sigs/kustomize/raw/master/api/krusty/testdata/customschema.json +`) + th.WriteK("overlay", ` +resources: +- ../base +`+customSchemaPatch) + writeCustomResource(th, "base/mycrd.yaml") + writeTestSchema(th, "base/") + m := th.Run("overlay", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, patchedCustomResource) + assert.Equal(t, "using custom schema from file provided", + openapi.GetSchemaVersion()) + }) +} + func TestCustomOpenApiFieldFromOverlay(t *testing.T) { runOpenApiTest(t, func(t *testing.T) { t.Helper() @@ -326,6 +366,29 @@ openapi: }) } +func TestCustomOpenApiFieldFromOverlayWithRemoteSchema(t *testing.T) { + runOpenApiTest(t, func(t *testing.T) { + t.Helper() + th := kusttest_test.MakeHarness(t) + th.WriteK("base", ` +resources: +- mycrd.yaml +`) + th.WriteK("overlay", ` +resources: +- ../base +openapi: + path: https://github.com/kubernetes-sigs/kustomize/raw/master/api/krusty/testdata/customschema.json +`+customSchemaPatch) + writeCustomResource(th, "base/mycrd.yaml") + writeTestSchema(th, "overlay/") + m := th.Run("overlay", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, patchedCustomResource) + assert.Equal(t, "using custom schema from file provided", + openapi.GetSchemaVersion()) + }) +} + func TestCustomOpenApiFieldOverlayTakesPrecedence(t *testing.T) { runOpenApiTest(t, func(t *testing.T) { t.Helper()