es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    labelSelector := metav1.LabelSelector{
        MatchExpressions: []metav1.LabelSelectorRequirement{
            {
                Key:      "nombre_etiqueta",
                Operator: metav1.LabelSelectorOpDoesNotExist,
            },
        },
    }
    nodeListOptions := metav1.ListOptions{
        LabelSelector: metav1.FormatLabelSelector(&labelSelector),
    }
    nodes, err := clientset.CoreV1().Nodes().List(nodeListOptions)
    if err != nil {
        return err
    }
    

    En el código anterior, estamos usando un LabelSelector con un LabelSelectorRequirement que verifica la ausencia de la etiqueta nombre_etiqueta. Luego, pasamos este LabelSelector a ListOptions para obtener la lista de nodos que no tienen esta etiqueta. Ten en cuenta que estamos utilizando la función metav1.FormatLabelSelector para formatear el LabelSelector como una cadena para usar con ListOptions.

    ¡Espero que esto te ayude!

Comments are closed.