K8s Test: v1alpha1类型未注册任何类型.jivvolume在方案中



如何在高朗k8s考试中注册CRD ?我正在创建假客户端:

k8sfake.NewSimpleClientset(
&jivaPV1,
&jv1,
)}},

我知道我可以通过在kubernetes中应用图表来注册CRD,但没有找到在golang中这样做的好方法。

我正在使用viaplha1.jivaVolume接口,它抛出了没有为类型viaplha1.jivaVolume注册类型的错误。下面是一个简短的代码部分,我创建了一个假的持久化卷对象,类型为jivvolume。

var jv1 = v1alpha1.JivaVolume{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name:      "pvc-1",
Namespace: "openebs",
Labels:    map[string]string{"nodeID": "worker-node-1"},
},
...
...

如何在fakeClient中注册种类?或如何在fakclient()中注册CRD ?

您必须将新的控制器API添加到方案中,请查看此示例。

import (
"context"
"testing"

cachev1alpha1 "github.com/some-operatorapi/pkg/apis/cache/v1alpha1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
)

func TestCachedController(t *testing.T) {
...
// A Cached object with metadata and spec.
cached := &cachev1alpha1.Cached{
ObjectMeta: metav1.ObjectMeta{
Name:      "memcached",
Namespace: "memcached-operator",
Labels: map[string]string{
"label-key": "label-value",
},
},
}

// Objects to track in the fake client.
Objs := []runtime.Object{}
Objs = append(Objs, cached)
scheme := runtime.NewScheme()
_ = cachev1alpha1.AddToScheme(scheme)
cl:=  fake.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(Objs...).Build()

// List Memcached objects filtering by labels
opt := client.MatchingLabels(map[string]string{"label-key": "label-value"})
memcachedList := &cachev1alpha1.MemcachedList{}
err := cl.List(context.TODO(), memcachedList, opt)
if err != nil {
t.Fatalf("list memcached: (%v)", err)
}
...
}

我认为没有应用你的那种CRD。K8s不知道什么是JivaVolume类型

相关内容

  • 没有找到相关文章

最新更新