繁体   English   中英

使用 apimachinery/client-go 检索不包含 label 的 kubernetes 节点

[英]Retrieve kubernetes nodes that do not contain label using apimachinery/client-go

我想获取包含 label 的kubernetes节点的列表(如果有)。

我已经设法使用client-go做相反的事情

    labelSelector := metav1.LabelSelector{
        MatchLabels: map[string]string{
            "somelabel": "somevalue",
        },
    }
    labelMap, err := metav1.LabelSelectorAsMap(&labelSelector)
    if err != nil {
        return false, errors.Wrap(err, "error converting node label selector to map")
    }
    nodeListOptions := metav1.ListOptions{
        LabelSelector: labels.SelectorFromSet(labelMap).String(),
    }
    nodes, err := clientset.CoreV1().Nodes().List(nodeListOptions)
    if err != nil {
        return false, errors.Wrap(err, "error getting node list")
    }

我想要实现的是转换以下kubectl调用

kubectl get ns --selector='!label_name'

进入client-go代码。

这可行吗?

我认为必须使用apimachinerylabels package 的Requirement 类型并基于此创建Selector构造

nodeReq, err := labels.NewRequirement("label_name", selection.DoesNotExist, []string{})
    if err != nil {
        return false, errors.Wrap(err, "error creating selector requirement")
    }
    selector := labels.NewSelector()
    selector = selector.Add(*nodeReq)
    if err != nil {
        return false, errors.Wrap(err, "error converting node label selector to map")
    }
    nodeListOptions := metav1.ListOptions{
        LabelSelector: selector.String(),
    }
    nodes, err := clientset.CoreV1().Nodes().List(nodeListOptions)


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM