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
Libérer: 2024-11-22 16:35:16
original
759 Les gens l'ont consulté

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
Copier après la connexion

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"
Copier après la connexion

Pour valider votre carte :

helm cel ./mychart
Copier après la connexion

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"
        }
      }
    }
  }
}
Copier après la connexion

CEL :

rules:
  - expr: "has(values.service) && has(values.service.port)"
    desc: "service port is required"
Copier après la connexion

2. Exigences conditionnelles

Schéma JSON :

{
  "if": {
    "properties": {
      "persistence": {
        "const": true
      }
    }
  },
  "then": {
    "required": ["storageClass"]
  }
}
Copier après la connexion

CEL :

rules:
  - expr: "!has(values.persistence) || !values.persistence || has(values.storageClass)"
    desc: "storageClass is required when persistence is enabled"
Copier après la connexion

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"
Copier après la connexion

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
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal