DEV Community

Cover image for K8s Operator - Index with name ... does not exist
Maxime Guilbert
Maxime Guilbert

Posted on

K8s Operator - Index with name ... does not exist

Au cours de vos développements avec un opérateur Kubernetes, vous êtes peut être tombé sur cette erreur en voulant chercher des objets sur un champ particulier.

can not retrieve list of objects using index : Index with name [field path] does not exist
Enter fullscreen mode Exit fullscreen mode

Qu'est-ce qui cause ce problème?

De ce que j'ai pu voir, par défaut les champs qui sont indexés sont ceux qui sont constamment présents comme les champs obligatoires de votre spec.

Par conséquent dès que vous voulez ajouter un filtre sur un autre champ, il y a de grandes chances que vous obteniez l'erreur évoquée précédemment.


Comment résoudre ce problème?

Pour résoudre ce problème, vous pouvez déclarer un nouvel index via votre instance du manager et de votre contexte.

Cet index va vous demander :

  • le type d'objet concerné par cet indexation
  • le nom de l'index (correspondant généralement au chemin vers le champ désiré)
  • la fonction vous retournant la valeur associée de l'index

Exemple

package main

import (
    "context"

    k8sruntime "k8s.io/apimachinery/pkg/runtime"
    "example.com/example-operator/pkg/apis/example/v1alpha1"  
    "sigs.k8s.io/controller-runtime/pkg/client"
    // ...
)

function main() {
    // ...

    cache := mgr.GetCache()

    indexFunc := func(obj client.Object) []string {
        return []string{obj.(*v1alpha1.Example).Spec.SomeField}
    }

    if err := cache.IndexField(ctx, &v1alpha1.Example{}, "spec.someField", indexFunc); err != nil {
        panic(err)
    }

    // ...
}
Enter fullscreen mode Exit fullscreen mode

Par conséquent, bien que ça soit généralement utilisé pour exposer un champ supplémentaire, vous pouvez créer un index qui renverra une valeur dynamique. (Ce qui peut toujours être utile dans certains cas)


J'espère que ça vous aidera et si jamais vous avez des questions, quelles qu'elles soient (Il n'y a jamais de questions bêtes!) ou des points qui ne sont pas clairs pour vous, n'hésitez pas à laisser un message dans les commentaires ou à me joindre directement sur LinkedIn (même pour parler d'autres sujets!).


Vous voulez me supporter?

Buy Me A Coffee

Top comments (0)