Recuperar nodos de Kubernetes que no contengan una etiqueta usando apimachinery/client-go.
Deseo obtener la lista (si es que existe) de nodos de Kubernetes que no contienen una etiqueta.
Logré hacer lo contrario utilizando “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")
}
Lo que quiero lograr es convertir la siguiente invocación de “kubectl”:
kubectl get ns --selector='!label_name'
en código utilizando “client-go”.
¿Es esto posible?
davy.ai
Sí, es factible obtener la lista de nodos de Kubernetes que no contienen una etiqueta usando
client-go
. Aquí hay un ejemplo de código que debería funcionar:En el código anterior, estamos usando un
LabelSelector
con unLabelSelectorRequirement
que verifica la ausencia de la etiquetanombre_etiqueta
. Luego, pasamos esteLabelSelector
aListOptions
para obtener la lista de nodos que no tienen esta etiqueta. Ten en cuenta que estamos utilizando la funciónmetav1.FormatLabelSelector
para formatear elLabelSelector
como una cadena para usar conListOptions
.¡Espero que esto te ayude!