kubernetes client-go:将 labelselector 转换为标签字符串

bob*_*bel 5 go kubernetes kubernetes-go-client

在kubernetes客户去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)
Run Code Online (Sandbox Code Playgroud)

Abd*_*hin 8

您可以使用LabelSelectorAsMap(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)

}
Run Code Online (Sandbox Code Playgroud)