我写了以下函数。它执行以下操作
- 遍历给定的命名空间并遍历所有 pod。
- 返回一个字符串切片,其中包含与命名约定匹配的 pod。
var slavePods []string
func getSlavePods(clientset *kubernetes.Clientset, ns string, release string) []string {
log.Printf("INFO :: Checking slave pods in %s namespace.\n", ns)
pods, err := clientset.CoreV1().Pods(ns).List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
for _, po := range pods.Items {
SlavePodRegex := "zjs-" + release + "-(tiny|small|medium|large)-(.*)"
log.Printf("INFO :: Regex is %s", SlavePodRegex)
matched, _ := regexp.MatchString(SlavePodRegex , po.Name)
if matched{
slavePods = append(slavePods, po.Name)
}
}
return slavePods
}
在上述情况下,客户端集的类型为*"k8s.io/client-go/kubernetes".Clientset
上述函数运行良好并返回所需的结果。
现在我正在为这个函数写一个测试。测试是
import (
"context"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes/fake"
"log"
"testing"
)
func TestgetSlavePods(t *testing.T) {
// Create the fake client.
client := fake.NewSimpleClientset()
// Inject an event into the fake client.
p := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "zjs-modelt-develop-small-n3d8t"}}
_, err := client.CoreV1().Pods("test-ns").Create(context.TODO(), p, metav1.CreateOptions{})
if err != nil {
t.Fatalf("error injecting pod add: %v", err)
}
// Actual test
podNames := getSlavePods(client, "test-ns", "modelt-develop")
if podNames != ["zjs-modelt-develop-small-n3d8t"] {
t.Error("Expected pod is not found")
}
}
我正在利用假库来初始化假客户端,在命名空间中创建一个 pod,然后测试该功能。但我收到一个错误
Cannot use 'client' (type *"k8s.io/client-go/kubernetes/fake".Clientset) as type *"k8s.io/client-go/kubernetes".Clientset
所以似乎存在一个问题,我无法使用 调用该函数,clientset
因为实际函数与测试函数的类型不同。我正在关注这个例子,他们似乎也在做同样的事情。有什么我错过的吗?