如何使用假的kubeclient返回假吊舱?

时间:2017-03-31 06:35:29

标签: kubernetes

我正在尝试为使用Kubernetes go-client的某些代码创建unittest。我的unittest使用Kubernetes fake来模拟Kubernetes。我的unittest尝试通过调用Pods.List来创建一些假pod。

创建假吊舱的正确方法是什么?

我首先尝试在假冒的情况下调用Pods.Create

_, err := j.ClientSet.CoreV1().Pods(NAMESPACE).Create(
    &v1.Pod{
        TypeMeta: meta_v1.TypeMeta{
            Kind:       "Pod",
            APIVersion: "v1",
        },
        ObjectMeta: v1.ObjectMeta{
            Name: j.masterName(),
            Labels: map[string]string{
                "tag":   "",
            },
        },
    })

l, err := j.ClientSet.CoreV1().Pods(NAMESPACE).List(v1.ListOptions{})

if len(l.Items) == 0 {
    t.Fatalf("No pods were returned by list.")
}

但是,对列表窗格的调用并没有返回窗格。

然后我尝试在创建假的时候创建pod; e.g。

j.ClientSet = fake.NewSimpleClientset(&v1.Pod{
    TypeMeta: meta_v1.TypeMeta{
        Kind: "pod",
    },
    ObjectMeta: v1.ObjectMeta{
        Name: j.masterName(),
        Labels: map[string]string{
            "tag":   "",
        },
    },
})

使用此代码,NewSimpleClientSet失败并出现紧急情况

panic: no matches for kind /, Kind=Pod [recovered]
        panic: no matches for kind /, Kind=Pod

2 个答案:

答案 0 :(得分:0)

您是否完全实现了ClientSet的界面?似乎有些关于资源类的东西你没有处理过。

答案 1 :(得分:0)

事实证明,在我的情况下,我使用的是非常旧版本的Kubernetes客户端和假货。当我更新到最新的代码时它起作用了。