DEV Community

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

Posted on

1 1 1 1 1

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

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

Try REST API Generation for Snowflake

DevOps for Private APIs. Automate the building, securing, and documenting of internal/private REST APIs with built-in enterprise security on bare-metal, VMs, or containers.

  • Auto-generated live APIs mapped from Snowflake database schema
  • Interactive Swagger API documentation
  • Scripting engine to customize your API
  • Built-in role-based access control

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay