Existe uma função de regex para modelos de leme de kubernetes disponíveis?

2

Estou tentando implementar um modelo de leme de entrada codificando a versão atual do aplicativo no URL. Isso permitirá que os usuários façam uma migração flexível, fornecendo diferentes versões do aplicativo.

Exemplo:

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

Para evitar configurar isso manualmente no ingresso em cada atualização, eu preferiria uma regex determinando a versão major.minor automaticamente. O aplicativo é revisado de acordo com a Semver 2.0.0, portanto, um padrão como \ d +. \ D + deve fazer o trabalho.

Eu tentei algo assim:

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+ }} 

Infelizmente, não consegui encontrar uma função para expressões regulares. Existe uma opção para conseguir isso com um modelo de leme?

    
por Oliver Probst 14.07.2017 / 08:43

2 respostas

2

Sim, existe. No entanto, infelizmente não está documentado.
O Helm usa a biblioteca sprig para fornecer funções adicionais aos modelos. O que não é documentado são muitas das funções do sprig que foram adicionadas ao código (ref issue # 84 ), e as funções de regex são algumas delas. Você pode encontrar essas funções aqui: link

Assim você pode fazer {{ .Chart.AppVersion | regexFind "\d+\.\d+" }}

(observe que também adicionei um \ antes do . para escapar, pois . significa corresponder a qualquer caractere, o que não parece ser sua intenção)

Não é seu caso de uso, mas um item de nota para outros que possam estar interessados em usar as funções regex* do raminho, é que infelizmente o dono do raminho fez do assunto o segundo argumento de todas as funções, e algumas as funções têm argumentos adicionais depois disso (por exemplo, a função regexReplaceAll ). A razão pela qual isso é um problema é que quando uma função é usada em um pipeline, o resultado do elemento anterior no pipeline se torna o último argumento da função. Portanto, isso não funciona: "foo subject string" | regexReplaceAll "foo" "bar" , pois ele tratará bar como a sequência a ser usada e foo subject string como a sequência para substituir as ocorrências de foo por (que neste exemplo não seria qualquer).

    
por 14.03.2018 / 13:20
2

Tive que lidar com isso hoje, você vai querer algo como:

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

Requer o duplo escape devido ao yaml.

Documentos para isso

    
por 16.03.2018 / 14:41

Tags