1 回答
TA贡献1878条经验 获得超4个赞
虽然调用几乎相同,内容也几乎相同,但它们的类型不同。 CoreV1().Pods(namespace).List
是 :
List(ctx context.Context, opts metav1.ListOptions) (*v1.PodList, error)
但是CoreV1().Services(namespace).List
是
List(ctx context.Context, opts metav1.ListOptions) (*v1.ServiceList, error)
一个返回 a *v1.PodList
,另一个返回 a *v1.ServiceList
。这两个不同的对象都有Items
,但一个是 a []*Service
,另一个是 a []*Pod
。
我个人会考虑不包装。我会改为调用底层函数,CoreV1
在两种情况下都使用相同的客户端。我当然不会尝试将它们组合成一个功能。
如果这里有什么要组合的,那就是命名空间和名称:
type ByName struct {
Name string
Namespace string
v1 corev1.CoreV1Interface
}
func (b *ByName)Services(ctx context.Context) []v1.Service , error {
return b.v1.Services(namespace).List(ctx, getListOption(b.Name))
}
func (b *ByName)Pods(ctx context.Context) []v1.Pod, error {
return b.v1.Pods(b.Namespace).List(ctx, getListOption(b.Name))
}
现在您不必传递名称和命名空间:
b := &ByName{
Name: name,
Namespace: namespace,
v1: clientset.CoreV1(),
}
if svcs, err := b.Services(); err != nil {
return nil, err
} else if pods, err := b.Pods(); err != nil {
return nil, err
} else {
... continue processing
}
而且您无需进行大量类型检查即可获得所需的简洁性。
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报