diff --git a/api/internal/target/kusttarget.go b/api/internal/target/kusttarget.go index a64892375..c3d4ecc6f 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" @@ -481,9 +480,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 } 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()