在kubernetes client-go API(或使用它的另一个库)中,是否有实用程序功能将k8s.io/apimachinery/pkg/apis/meta/v1/LabelSelector转换为字符串以填充LabelSelector中的k8s.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)

最佳答案

您可以使用LabelSelectorAsMap(LabelSelector)函数将labelselector转换为map[string]string映射。

然后,使用SelectorFromSet包中的k8s.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)

}

关于go - kubernetes client-go : convert labelselector to label string,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56231176/

10-11 16:09