6

在 kubernetes client-go API(或另一个使用它的库)中,是否有一个实用函数可以将 a 转换为k8s.io/apimachinery/pkg/apis/meta/v1/LabelSelector字符串以填充字段?LabelSelectork8s.io/apimachinery/pkg/apis/meta/v1/ListOptions

我挖掘了代码,client-go但找不到这样的函数。

LabelSelector.Marshall()也不给我那个(不出所料,因为这LabelSelector.String()不是他们的目的,但我还是试过了)。

背景

我有类似的规范描述k8s.io/api/extensions/v1beta1/Deployment,并希望使用它的一组选择器标签(即Selector字段)来查询它的 pod

options := metav1.ListOptions{
    LabelSelector: <stringified labels>,
}

podList, err := clientset.CoreV1().Pods(<namespace>).List(options)
4

1 回答 1

10

您可以使用LabelSelectorAsMap(LabelSelector)函数将标签选择器转换为map[string]string地图。

然后,使用SelectorFromSetk8s.io/apimachinery/pkg/labels的功能转换map为选择器/字符串。

伪代码:

import (
    "k8s.io/apimachinery/pkg/labels"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func ListPod(labelSelector metav1.LabelSelector) {

    labelMap := metav1.LabelSelectorAsMap(labelSelector)

    options := metav1.ListOptions{
        LabelSelector: labels.SelectorFromSet(labelMap).String(),
    }

    podList, err := clientset.CoreV1().Pods("<namespace>").List(options)

}
于 2019-05-21T06:18:03.097 回答