我想获取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代码。
这可行吗?
发布于 2021-12-22 19:40:04
我认为,我们必须使用Requirement 类型 of apimachinery的labels包,并在此基础上创建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)https://stackoverflow.com/questions/70453832
复制相似问题