Maison >développement back-end >Golang >Présentation de Helm CEL : une manière plus expressive de valider vos graphiques Helm
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.
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.
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
Examinons quelques modèles de validation courants et comment ils sont exprimés à la fois dans le schéma JSON et dans le CEL.
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"
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"
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"
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
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.
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!