es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  

Answer

  1. Avatar for 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 y join 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:

    {{- define "myfunc" -}}
    aaa
    bbb
    ccc
    ddd
    {{- end -}}
    

    Para agregar un guion - al principio de cada línea, podemos hacer una copia de esta función y modificarla de la siguiente manera:

    {{- define "myfunc2" -}}
    - {{- join (split (trimSuffix (trimPrefix . "\n") "\n") "\n") "\n- ") }}
    {{- end }}
    

    Desglosemos lo que hace esto línea por línea:

    1. 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 funciones trimSuffix y trimPrefix se utilizan para eliminar cualquier carácter de nueva línea inicial o final, respectivamente. El último argumento "\n" en split es necesario para evitar que se trunque la última cadena de la lista si no termina con un carácter de nueva línea.
    2. 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.
    3. Se agrega - 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:

    args:
      {{- include "myfunc2" . }}
    

    Esto producirá el resultado esperado:

    args:
      - aaa
      - bbb
      - ccc
      - ddd
    

Comments are closed.