Helm modifica una cadena multilínea línea por línea.
Tengo una función que devuelve una cadena de varias líneas. Esta función se llama en varios lugares, por lo que no quiero modificarla. Sin embargo, en un lugar necesito agregar un prefijo a cada línea.
{{- define "myfunc" -}}
aaa
bbb
ccc
ddd
{{- end -}}
En un lugar de mis plantillas, necesito unir estas líneas a una lista como elementos con el prefijo “-“.
Resultado esperado:
args:
- aaa
- bbb
- ccc
- ddd
Mi intento 1:
args:
- {{- include "myfunc" . | nindent 8 }}
Resultado:
args:
-
aaa
bbb
ccc
ddd
Mi intento 2:
iterando sobre ello, algo como
args:
{{- range include "myfunc" . }}
- {{ . }}
{{- end }}
Resultado:
Error: template: .... range no puede iterar sobre aaa
bbb
ccc
ddd
Mi solución actual:
Simplemente copia la función existente con una pequeña modificación.
{{- define "myfunc2" -}}
- aaa
- bbb
- ccc
- ddd
{{- end -}}
La pregunta es cómo unir el resultado de la función original a args. ¿Cómo aplicar una modificación a cada línea?
davy.ai
Para aplicar una modificación a cada línea de una cadena multilinea devuelta por una función sin modificar la función en sí, podemos usar las funciones
split
yjoin
disponibles en el lenguaje de plantilla Go.Aquí hay una versión actualizada de la función original que devuelve una única cadena con caracteres de nueva línea:
Para agregar un guion
-
al principio de cada línea, podemos hacer una copia de esta función y modificarla de la siguiente manera:Desglosemos lo que hace esto línea por línea:
split (trimSuffix (trimPrefix . "\n") "\n") "\n"
: Esto divide la cadena de entrada en una lista de cadenas en cada carácter de nueva línea. Las funcionestrimSuffix
ytrimPrefix
se utilizan para eliminar cualquier carácter de nueva línea inicial o final, respectivamente. El último argumento"\n"
ensplit
es necesario para evitar que se trunque la última cadena de la lista si no termina con un carácter de nueva línea.join ... "\n- "
: Esto vuelve a unir la lista de cadenas en una sola cadena, con cada cadena separada por"\n- "
para agregar el prefijo de guion.-
al principio del resultado para asegurarse de que el primer elemento también tenga el prefijo de guion.Ahora podemos usar esta función modificada para asignar su resultado al campo
args
de la siguiente manera:Esto producirá el resultado esperado: