mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-14 10:30:59 +00:00
Merge pull request #4210 from natasha41575/openapiFromComponent
fix issue with getting openapi schema from components
This commit is contained in:
3
Makefile
3
Makefile
@@ -229,7 +229,8 @@ generate-kustomize-api: $(MYGOBIN)/k8scopy
|
|||||||
|
|
||||||
.PHONY: test-unit-kustomize-api
|
.PHONY: test-unit-kustomize-api
|
||||||
test-unit-kustomize-api: build-kustomize-api
|
test-unit-kustomize-api: build-kustomize-api
|
||||||
cd api; go test ./... -ldflags "-X sigs.k8s.io/kustomize/api/provenance.version=v444.333.222"
|
cd api; go test ./... -ldflags "-X sigs.k8s.io/kustomize/api/provenance.version=v444.333.222"; \
|
||||||
|
cd krusty; OPENAPI_TEST=true go test -run TestCustomOpenAPIFieldFromComponentWithOverlays
|
||||||
|
|
||||||
.PHONY: test-unit-kustomize-plugins
|
.PHONY: test-unit-kustomize-plugins
|
||||||
test-unit-kustomize-plugins:
|
test-unit-kustomize-plugins:
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ package krusty_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@@ -346,3 +347,109 @@ func TestCustomOpenAPIFieldFromComponent(t *testing.T) {
|
|||||||
th.Run("prod", th.MakeDefaultOptions())
|
th.Run("prod", th.MakeDefaultOptions())
|
||||||
assert.Equal(t, "using custom schema from file provided", openapi.GetSchemaVersion())
|
assert.Equal(t, "using custom schema from file provided", openapi.GetSchemaVersion())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test for https://github.com/kubernetes-sigs/kustomize/issues/4179
|
||||||
|
// kustomize is not seeing the openapi field from the component defined in the overlay
|
||||||
|
func TestCustomOpenAPIFieldFromComponentWithOverlays(t *testing.T) {
|
||||||
|
if val, ok := os.LookupEnv("OPENAPI_TEST"); !ok || val != "true" {
|
||||||
|
t.SkipNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
th := kusttest_test.MakeHarness(t)
|
||||||
|
|
||||||
|
// overlay declaring the component
|
||||||
|
th.WriteK("overlays/overlay-component-openapi", `resources:
|
||||||
|
- ../base/
|
||||||
|
components:
|
||||||
|
- ../../components/dc-openapi
|
||||||
|
`)
|
||||||
|
|
||||||
|
// base kustomization
|
||||||
|
th.WriteK("overlays/base", `resources:
|
||||||
|
- dc.yml
|
||||||
|
`)
|
||||||
|
|
||||||
|
// resource declared in the base kustomization
|
||||||
|
th.WriteF("overlays/base/dc.yml", `apiVersion: apps.openshift.io/v1
|
||||||
|
kind: DeploymentConfig
|
||||||
|
metadata:
|
||||||
|
name: my-dc
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
initContainers:
|
||||||
|
- name: init
|
||||||
|
containers:
|
||||||
|
- name: container
|
||||||
|
env:
|
||||||
|
- name: foo
|
||||||
|
value: bar
|
||||||
|
volumeMounts:
|
||||||
|
- name: cm
|
||||||
|
mountPath: /opt/cm
|
||||||
|
volumes:
|
||||||
|
- name: cm
|
||||||
|
configMap:
|
||||||
|
name: cm
|
||||||
|
`)
|
||||||
|
|
||||||
|
// openapi schema referred to by the component
|
||||||
|
bytes, _ := ioutil.ReadFile("testdata/openshiftschema.json")
|
||||||
|
th.WriteF("components/dc-openapi/openapi.json", string(bytes))
|
||||||
|
|
||||||
|
// patch referred to by the component
|
||||||
|
th.WriteF("components/dc-openapi/patch.yml", `apiVersion: apps.openshift.io/v1
|
||||||
|
kind: DeploymentConfig
|
||||||
|
metadata:
|
||||||
|
name: my-dc
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: container
|
||||||
|
volumeMounts:
|
||||||
|
- name: additional-cm
|
||||||
|
mountPath: /mnt
|
||||||
|
volumes:
|
||||||
|
- name: additional-cm
|
||||||
|
configMap:
|
||||||
|
name: additional-cm
|
||||||
|
`)
|
||||||
|
|
||||||
|
// component declared in overlay with custom schema and patch
|
||||||
|
th.WriteC("components/dc-openapi", `patches:
|
||||||
|
- patch.yml
|
||||||
|
openapi:
|
||||||
|
path: openapi.json
|
||||||
|
`)
|
||||||
|
|
||||||
|
openapi.ResetOpenAPI()
|
||||||
|
m := th.Run("overlays/overlay-component-openapi", th.MakeDefaultOptions())
|
||||||
|
th.AssertActualEqualsExpected(m, `apiVersion: apps.openshift.io/v1
|
||||||
|
kind: DeploymentConfig
|
||||||
|
metadata:
|
||||||
|
name: my-dc
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: foo
|
||||||
|
value: bar
|
||||||
|
name: container
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /mnt
|
||||||
|
name: additional-cm
|
||||||
|
- mountPath: /opt/cm
|
||||||
|
name: cm
|
||||||
|
initContainers:
|
||||||
|
- name: init
|
||||||
|
volumes:
|
||||||
|
- configMap:
|
||||||
|
name: additional-cm
|
||||||
|
name: additional-cm
|
||||||
|
- configMap:
|
||||||
|
name: cm
|
||||||
|
name: cm
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|||||||
76
api/krusty/testdata/openshiftschema.json
vendored
Normal file
76
api/krusty/testdata/openshiftschema.json
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"definitions": {
|
||||||
|
"com.github.openshift.api.apps.v1.DeploymentConfig": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"spec"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"$ref": "#/definitions/com.github.openshift.api.apps.v1.DeploymentConfigSpec"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-kubernetes-group-version-kind": [
|
||||||
|
{
|
||||||
|
"group": "apps.openshift.io",
|
||||||
|
"kind": "DeploymentConfig",
|
||||||
|
"version": "v1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"com.github.openshift.api.apps.v1.DeploymentConfigSpec": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"template": {
|
||||||
|
"$ref": "#/definitions/io.k8s.api.core.v1.PodTemplateSpec"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"io.k8s.api.core.v1.Volume": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"configMap": {
|
||||||
|
"$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"io.k8s.api.core.v1.VolumeMount": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"mountPath"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"mountPath": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -555,6 +555,8 @@ func SetSchema(openAPIField map[string]string, schema []byte, reset bool) error
|
|||||||
if schema != nil { // use custom schema
|
if schema != nil { // use custom schema
|
||||||
customSchema = schema
|
customSchema = schema
|
||||||
kubernetesOpenAPIVersion = "custom"
|
kubernetesOpenAPIVersion = "custom"
|
||||||
|
// if the schema is changed, initSchema should parse the new schema
|
||||||
|
globalSchema.schemaInit = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,6 +569,8 @@ func SetSchema(openAPIField map[string]string, schema []byte, reset bool) error
|
|||||||
return fmt.Errorf("the specified OpenAPI version is not built in")
|
return fmt.Errorf("the specified OpenAPI version is not built in")
|
||||||
}
|
}
|
||||||
customSchema = nil
|
customSchema = nil
|
||||||
|
// if the schema is changed, initSchema should parse the new schema
|
||||||
|
globalSchema.schemaInit = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user