![](/img/trans.png)
[英]kubernetes client-go: convert labelselector to label string
[英]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
代码。
这可行吗?
我认为必须使用apimachinery
的labels
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.