Maison >développement back-end >Golang >Présentation de Helm CEL : une manière plus expressive de valider vos graphiques Helm

Présentation de Helm CEL : une manière plus expressive de valider vos graphiques Helm

Barbara Streisand
Barbara Streisandoriginal
2024-11-22 16:35:16749parcourir

Introducing Helm CEL: A More Expressive Way to Validate Your Helm Charts

Si vous avez travaillé avec des graphiques Helm, vous connaissez probablement le défi de la validation de Values.yaml. Bien que la validation de schéma JSON intégrée de Helm fonctionne, elle peut être lourde et limitante. Aujourd'hui, je souhaite vous présenter Helm CEL, un plugin qui apporte la puissance du Common Expression Language (CEL) de Google à la validation des graphiques Helm.

Qu’est-ce que le CEL ?

Avant de plonger dans le vif du sujet, expliquons rapidement ce qu'est le CEL. Common Expression Language (CEL) est un langage d'expression simple créé par Google qui vous permet d'écrire des règles de validation concises et puissantes. Il est utilisé dans la validation Kubernetes CRD, la configuration d'Istio et de nombreux autres projets de l'écosystème cloud natif.

Pourquoi utiliser le schéma CEL au lieu du schéma JSON ?

  1. Plus expressif : CEL permet d'écrire des règles de validation complexes de manière plus naturelle et lisible
  2. Syntaxe familière : Si vous venez de langages de programmation comme Python ou JavaScript, la syntaxe de CEL vous semblera naturelle
  3. Type-Safe : CEL fournit une vérification de type solide tout en restant flexible
  4. Conçu pour Cloud Native : CEL est déjà utilisé dans tout l'écosystème Kubernetes

Commencer

Tout d'abord, installez le plugin :

helm plugin install https://github.com/idsulik/helm-cel

Au lieu de créer un fichiervalues.schema.json, vous allez créer un fichiervalues.cel.yaml dans votre répertoire de graphiques. Voici un exemple simple :

rules:
  - expr: "has(values.service) && has(values.service.port)"
    desc: "service port is required"

  - expr: "values.service.port >= 1 && values.service.port <= 65535"
    desc: "service port must be between 1 and 65535"

  - expr: "!(has(values.replicaCount)) || values.replicaCount >= 1"
    desc: "if replicaCount is set, it must be at least 1"

Pour valider votre carte :

helm cel ./mychart

Exemples concrets

Examinons quelques modèles de validation courants et comment ils sont exprimés à la fois dans le schéma JSON et dans le CEL.

1. Champs obligatoires

Schéma JSON :

{
  "required": ["service"],
  "properties": {
    "service": {
      "required": ["port"],
      "properties": {
        "port": {
          "type": "integer"
        }
      }
    }
  }
}

CEL :

rules:
  - expr: "has(values.service) && has(values.service.port)"
    desc: "service port is required"

2. Exigences conditionnelles

Schéma JSON :

{
  "if": {
    "properties": {
      "persistence": {
        "const": true
      }
    }
  },
  "then": {
    "required": ["storageClass"]
  }
}

CEL :

rules:
  - expr: "!has(values.persistence) || !values.persistence || has(values.storageClass)"
    desc: "storageClass is required when persistence is enabled"

3. Validations complexes

Le schéma JSON peut devenir assez verbeux pour des validations complexes. Voici un exemple CEL qui serait beaucoup plus compliqué dans le schéma JSON :

rules:
  - expr: |
      !has(values.resources) || 
      (!has(values.resources.limits) && !has(values.resources.requests)) ||
      (has(values.resources.limits.memory) && has(values.resources.requests.memory) &&
       int(values.resources.requests.memory) <= int(values.resources.limits.memory))
    desc: "If resources are specified, memory request must not exceed memory limit"

Messages d'erreur qui ont du sens

L'une des meilleures fonctionnalités de Helm CEL réside dans ses messages d'erreur clairs. Lorsque la validation échoue, vous obtenez un résultat utile comme celui-ci :

❌ Validation failed: replica count must be at least 1
   Rule: values.replicaCount >= 1
   Path: replicaCount
   Current value: 0

Considérations relatives aux performances

Les expressions CEL sont compilées et évaluées efficacement. Le plugin ajoute une surcharge minimale à votre flux de travail Helm, ce qui le rend adapté à la fois aux pipelines de développement et CI/CD.

Prochaines étapes

  1. Installez le plugin : installez le plugin helm https://github.com/idsulik/helm-cel
  2. Consultez le référentiel GitHub pour plus d'exemples
  3. Commencez à écrire vos propres règles de validation !

Conclusion

Helm CEL apporte un moyen plus expressif et maintenable de valider vos graphiques Helm. Si vous avez déjà eu du mal avec le schéma JSON ou si vous souhaitez des règles de validation plus flexibles, essayez-le. La combinaison d'une syntaxe familière, d'expressions puissantes et de messages d'erreur clairs en fait un ajout précieux à la boîte à outils de tout utilisateur Helm.

Quels modèles de validation aimeriez-vous voir ? Faites-le-moi savoir dans les commentaires ci-dessous !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn