mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
This PR intends to move the loader api to internal. Only the necessary methods which are needed for the api have been put into `pkg/loader.go`. Signed-off-by: Varsha Prasad Narsing <varshaprasad96@gmail.com>
177 lines
5.4 KiB
Go
177 lines
5.4 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package accumulator_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
. "sigs.k8s.io/kustomize/api/internal/accumulator"
|
|
"sigs.k8s.io/kustomize/api/internal/loader"
|
|
"sigs.k8s.io/kustomize/api/internal/plugins/builtinconfig"
|
|
"sigs.k8s.io/kustomize/api/types"
|
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
|
"sigs.k8s.io/kustomize/kyaml/resid"
|
|
)
|
|
|
|
// This defines two CRD's: Bee and MyKind.
|
|
//
|
|
// Bee is boring, it's spec has no dependencies.
|
|
//
|
|
// MyKind, however, has a spec that contains
|
|
// a Bee and a (k8s native) Secret.
|
|
const (
|
|
crdContent = `
|
|
{
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.Bee": {
|
|
"Schema": {
|
|
"description": "Bee",
|
|
"properties": {
|
|
"apiVersion": {
|
|
"description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert
|
|
recognized schemas to the latest internal value, and may reject unrecognized values.
|
|
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"description": "Kind is a string value representing the REST resource this object represents. Servers may infer
|
|
this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.
|
|
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds",
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"$ref": "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"
|
|
},
|
|
"spec": {
|
|
"$ref": "github.com/example/pkg/apis/jingfang/v1beta1.BeeSpec"
|
|
},
|
|
"status": {
|
|
"$ref": "github.com/example/pkg/apis/jingfang/v1beta1.BeeStatus"
|
|
}
|
|
}
|
|
},
|
|
"Dependencies": [
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.BeeSpec",
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.BeeStatus",
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"
|
|
]
|
|
},
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.BeeSpec": {
|
|
"Schema": {
|
|
"description": "BeeSpec defines the desired state of Bee"
|
|
},
|
|
"Dependencies": []
|
|
},
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.BeeStatus": {
|
|
"Schema": {
|
|
"description": "BeeStatus defines the observed state of Bee"
|
|
},
|
|
"Dependencies": []
|
|
},
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.MyKind": {
|
|
"Schema": {
|
|
"description": "MyKind",
|
|
"properties": {
|
|
"apiVersion": {
|
|
"description": "APIVersion defines the versioned schema of this representation of an object.
|
|
Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.
|
|
More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"description": "Kind is a string value representing the REST resource this object represents.
|
|
Servers may infer this from the endpoint the client submits requests to. Cannot be updated.
|
|
In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds",
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"$ref": "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"
|
|
},
|
|
"spec": {
|
|
"$ref": "github.com/example/pkg/apis/jingfang/v1beta1.MyKindSpec"
|
|
},
|
|
"status": {
|
|
"$ref": "github.com/example/pkg/apis/jingfang/v1beta1.MyKindStatus"
|
|
}
|
|
}
|
|
},
|
|
"Dependencies": [
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.MyKindSpec",
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.MyKindStatus",
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"
|
|
]
|
|
},
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.MyKindSpec": {
|
|
"Schema": {
|
|
"description": "MyKindSpec defines the desired state of MyKind",
|
|
"properties": {
|
|
"beeRef": {
|
|
"x-kubernetes-object-ref-api-version": "v1beta1",
|
|
"x-kubernetes-object-ref-kind": "Bee",
|
|
"$ref": "github.com/example/pkg/apis/jingfang/v1beta1.Bee"
|
|
},
|
|
"secretRef": {
|
|
"description": "If defined, we use this secret for configuring the MYSQL_ROOT_PASSWORD
|
|
If it is not set we generate a secret dynamically",
|
|
"x-kubernetes-object-ref-api-version": "v1",
|
|
"x-kubernetes-object-ref-kind": "Secret",
|
|
"$ref": "k8s.io/api/core/v1.LocalObjectReference"
|
|
}
|
|
}
|
|
},
|
|
"Dependencies": [
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.Bee",
|
|
"k8s.io/api/core/v1.LocalObjectReference"
|
|
]
|
|
},
|
|
"github.com/example/pkg/apis/jingfang/v1beta1.MyKindStatus": {
|
|
"Schema": {
|
|
"description": "MyKindStatus defines the observed state of MyKind"
|
|
},
|
|
"Dependencies": []
|
|
}
|
|
}
|
|
`
|
|
)
|
|
|
|
func TestLoadCRDs(t *testing.T) {
|
|
nbrs := []builtinconfig.NameBackReferences{
|
|
{
|
|
Gvk: resid.Gvk{Kind: "Secret", Version: "v1"},
|
|
Referrers: []types.FieldSpec{
|
|
{
|
|
Gvk: resid.Gvk{Kind: "MyKind"},
|
|
Path: "spec/secretRef/name",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Gvk: resid.Gvk{Kind: "Bee", Version: "v1beta1"},
|
|
Referrers: []types.FieldSpec{
|
|
{
|
|
Gvk: resid.Gvk{Kind: "MyKind"},
|
|
Path: "spec/beeRef/name",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
expectedTc := &builtinconfig.TransformerConfig{
|
|
NameReference: nbrs,
|
|
}
|
|
|
|
fSys := filesys.MakeFsInMemory()
|
|
err := fSys.WriteFile("/testpath/crd.json", []byte(crdContent))
|
|
require.NoError(t, err)
|
|
ldr, err := loader.NewLoader(loader.RestrictionRootOnly, "/testpath", fSys)
|
|
require.NoError(t, err)
|
|
|
|
actualTc, err := LoadConfigFromCRDs(ldr, []string{"crd.json"})
|
|
require.NoError(t, err)
|
|
if !reflect.DeepEqual(actualTc, expectedTc) {
|
|
t.Fatalf("expected\n %v\n but got\n %v\n", expectedTc, actualTc)
|
|
}
|
|
}
|