web-dev-qa-db-fra.com

Y a-t-il une fonction de regex pour les modèles KubeNettes Helm disponibles?

J'essaie d'implémenter un modèle de barre d'entrée encodant la version de l'application actuelle dans l'URL. Cela permettra aux utilisateurs de faire une migration molle en leur fournissant différentes versions de l'application.

Exemple:

mydomain.org/1.0/applicationpath
mydomain.org/1.1/applicationpath
mydomain.org/2.0/applicationpath

Pour empêcher la configuration manuelle manuellement dans l'entrée de chaque mise à jour, je préférerais une regex déterminant automatiquement la version majeure.minor. L'application est révisée selon Semver 2.0.0, donc un motif comme\D +.\D + devrait faire le travail.

J'ai essayé quelque chose comme ça:

apiVersion: extensions/v1beta1
kind: Ingress
spec:
  backend:
    serviceName: {{ .Release.Name }}-my-srv
    servicePort: 80
  rules:
  - Host: {{ .Values.app.ingress.Host }}
    http:
      paths:
        - path: /{{ .Chart.AppVersion | regex \d+.\d+ }} 

Malheureusement, je n'ai pas pu trouver une fonction pour des expressions régulières. Y a-t-il une option pour y parvenir avec un modèle de barre?

9
Oliver Probst

Oui il y a. Cependant, c'est malheureusement sans papiers.
Helm utilise la bibliothèque SWIG pour fournir des fonctions supplémentaires pour la templature. Ce qui est non documenté, c'est de nombreuses fonctions Sprig qui ont été ajoutées au code (Ref numéro n ° 84 ) et les fonctions de regex sont certaines d'entre elles. Vous pouvez trouver ces fonctions ici: https://github.com/mastermins/sprig/blob/master/regex.o

Ainsi, vous pouvez faire {{ .Chart.AppVersion | regexFind "\d+\.\d+" }}

(Notez que j'ai aussi ajouté un \ avant le . Pour vous échapper comme . signifie correspondre à n'importe quel personnage, ce qui ne semble pas être votre intention)

Pas votre cas d'utilisation, mais un élément de note pour d'autres personnes qui pourraient être intéressées à utiliser regex* Fonctions de Sprig, c'est que malheureusement, le propriétaire de Sprig a fait la chaîne d'objet de la deuxième argument de toutes les fonctions, et certaines des fonctions ont des arguments supplémentaires après cela (par exemple, la fonction regexReplaceAll). La raison pour laquelle il s'agit d'un problème est que lorsqu'une fonction est utilisée dans un pipeline, le résultat de l'élément précédent dans le pipeline devient le dernier argument de la fonction. Donc, cela ne fonctionne pas: "foo subject string" | regexReplaceAll "foo" "bar", comme ça va traiter bar comme la chaîne à utiliser sur et foo subject string Comme la chaîne pour remplacer les occurrences de foo avec (qui dans cet exemple n'y aurait pas).

11
Patrick

J'ai dû faire face à cela aujourd'hui, vous voudrez quelque chose comme:

{{ regexFind "\\d+\\.\\d+" .Chart.AppVersion }}

Nécessite les doubles évasions dues à Yaml.

docs pour cela

7
John White