Lista de Funciones de Plantilla
Helm incluye muchas funciones de plantilla que puede aprovechar en sus plantillas. Se enumeran aquí y se desglosan en las siguientes categorías:
- Criptografía y Seguridad
- Fecha
- Diccionarios
- Codificación
- Rutas de Archivos
- Kubernetes y Chart
- Lógica y Control de Flujo
- Listas
- Matemáticas
- Matemáticas de Punto Flotante
- Red
- Reflexión
- Expresiones Regulares
- Versiones Semánticas
- Cadenas
- Conversión de Tipos
- URL
- UUID
Funciones de Lógica y Control de Flujo
Helm incluye numerosas funciones de lógica y control de flujo incluyendo and, coalesce, default, empty, eq, fail, ge, gt, le, lt, ne, not, or, y required.
and
Devuelve el AND booleano de dos o más argumentos (el primer argumento vacío, o el último argumento).
and .Arg1 .Arg2
or
Devuelve el OR booleano de dos o más argumentos (el primer argumento no vacío, o el último argumento).
or .Arg1 .Arg2
not
Devuelve la negación booleana de su argumento.
not .Arg
eq
Devuelve la igualdad booleana de los argumentos (ej., Arg1 == Arg2).
eq .Arg1 .Arg2
ne
Devuelve la desigualdad booleana de los argumentos (ej., Arg1 != Arg2)
ne .Arg1 .Arg2
lt
Devuelve un booleano verdadero si el primer argumento es menor que el segundo. De lo contrario devuelve falso (ej., Arg1 < Arg2).
lt .Arg1 .Arg2
le
Devuelve un booleano verdadero si el primer argumento es menor o igual que el segundo. De lo contrario devuelve falso (ej., Arg1 <= Arg2).
le .Arg1 .Arg2
gt
Devuelve un booleano verdadero si el primer argumento es mayor que el segundo. De lo contrario devuelve falso (ej., Arg1 > Arg2).
gt .Arg1 .Arg2
ge
Devuelve un booleano verdadero si el primer argumento es mayor o igual que el segundo. De lo contrario devuelve falso (ej., Arg1 >= Arg2).
ge .Arg1 .Arg2
default
Para establecer un valor por defecto simple, use default:
default "foo" .Bar
En el ejemplo anterior, si .Bar evalúa a un valor no vacío, se usará ese valor. Pero si
está vacío, se devolverá foo en su lugar.
La definición de "vacío" depende del tipo:
- Numérico: 0
- Cadena: ""
- Listas:
[] - Diccionarios:
{} - Booleano:
false - Y siempre
nil(también conocido como null)
Para estructuras, no hay definición de vacío, por lo que una estructura nunca devolverá el valor por defecto.
required
Especifique valores que deben establecerse con required:
required "A valid foo is required!" .Bar
Si .Bar está vacío o no está definido (consulte default para saber cómo se
evalúa), la plantilla no se renderizará y devolverá el mensaje de error
proporcionado en su lugar.
empty
La función empty devuelve true si el valor dado se considera vacío, y
false en caso contrario. Los valores vacíos se enumeran en la sección default.
empty .Foo
Note que en los condicionales de plantillas de Go, el vacío se calcula automáticamente. Por lo tanto,
raramente necesitará if not empty .Foo. En su lugar, simplemente use if .Foo.
fail
Devuelve incondicionalmente un string vacío y un error con el texto
especificado. Esto es útil en escenarios donde otras condiciones han determinado que
el renderizado de la plantilla debe fallar.
fail "Please accept the end user license agreement"
coalesce
La función coalesce toma una lista de valores y devuelve el primer valor no vacío.
coalesce 0 1 2
Lo anterior devuelve 1.
Esta función es útil para recorrer múltiples variables o valores:
coalesce .name .parent.name "Matt"
Lo anterior primero verificará si .name está vacío. Si no lo está, devolverá
ese valor. Si está vacío, coalesce evaluará .parent.name para verificar
si está vacío. Finalmente, si tanto .name como .parent.name están vacíos, devolverá
Matt.
ternary
La función ternary toma dos valores y un valor de prueba. Si el valor de prueba es
verdadero, se devolverá el primer valor. Si el valor de prueba está vacío, se devolverá
el segundo valor. Esto es similar al operador ternario en C y otros lenguajes de programación.
valor de prueba verdadero
ternary "foo" "bar" true
o
true | ternary "foo" "bar"
Lo anterior devuelve "foo".
valor de prueba falso
ternary "foo" "bar" false
o
false | ternary "foo" "bar"
Lo anterior devuelve "bar".
Funciones de Cadenas
Helm incluye las siguientes funciones de cadenas: abbrev, abbrevboth, camelcase, cat, contains, hasPrefix, hasSuffix, indent, initials, kebabcase, lower, nindent, nospace, plural, print, printf, println, quote, randAlpha, randAlphaNum, randAscii, randNumeric, repeat, replace, shuffle, snakecase, squote, substr, swapcase, title, trim, trimAll, trimPrefix, trimSuffix, trunc, untitle, upper, wrap, y wrapWith.
print
Devuelve una cadena a partir de la combinación de sus partes.
print "Matt has " .Dogs " dogs"
Los tipos que no son cadenas se convierten a cadenas cuando es posible.
Note que cuando dos argumentos adyacentes no son cadenas, se agrega un espacio entre ellos.
println
Funciona de la misma manera que print pero agrega una nueva línea al final.
printf
Devuelve una cadena basada en una cadena de formato y los argumentos a pasar en orden.
printf "%s has %d dogs." .Name .NumberDogs
El marcador de posición a usar depende del tipo del argumento que se pasa. Esto incluye:
Propósito general:
%vel valor en formato por defecto- al imprimir diccionarios, el flag plus (%+v) agrega nombres de campo
%%un signo de porcentaje literal; no consume ningún valor
Booleano:
%tla palabra true o false
Entero:
%bbase 2%cel carácter representado por el punto de código Unicode correspondiente%dbase 10%obase 8%Obase 8 con prefijo 0o%qun literal de carácter entre comillas simples escapado de forma segura%xbase 16, con letras minúsculas para a-f%Xbase 16, con letras mayúsculas para A-F%Uformato Unicode: U+1234; igual que "U+%04X"
Punto flotante y componentes complejos:
%bnotación científica decimal con exponente potencia de dos, ej. -123456p-78%enotación científica, ej. -1.234456e+78%Enotación científica, ej. -1.234456E+78%fpunto decimal pero sin exponente, ej. 123.456%Fsinónimo de %f%g%e para exponentes grandes, %f en caso contrario.%G%E para exponentes grandes, %F en caso contrario%xnotación hexadecimal (con exponente potencia de dos decimal), ej. -0x1.23abcp+20%Xnotación hexadecimal mayúsculas, ej. -0X1.23ABCP+20
Cadena y slice de bytes (tratados de manera equivalente con estos verbos):
%slos bytes sin interpretar de la cadena o slice%quna cadena entre comillas dobles escapada de forma segura%xbase 16, minúsculas, dos caracteres por byte%Xbase 16, mayúsculas, dos caracteres por byte
Slice:
%pdirección del elemento 0 en notación base 16, con 0x inicial
trim
La función trim elimina los espacios en blanco de ambos lados de una cadena:
trim " hello "
Lo anterior produce hello
trimAll
Elimina los caracteres dados del principio y final de una cadena:
trimAll "$" "$5.00"
Esto devuelve 5.00 (como cadena).
trimPrefix
Elimina solo el prefijo de una cadena:
trimPrefix "-" "-hello"
Lo anterior devuelve hello
trimSuffix
Elimina solo el sufijo de una cadena:
trimSuffix "-" "hello-"
Lo anterior devuelve hello
lower
Convierte toda la cadena a minúsculas:
lower "HELLO"
Esto devuelve hello
upper
Convierte toda la cadena a mayúsculas:
upper "hello"
Lo anterior devuelve HELLO
title
Convierte a formato de título:
title "hello world"
Lo anterior devuelve Hello World
untitle
Elimina el formato de título. untitle "Hello World" produce hello world.
repeat
Repite una cadena múltiples veces:
repeat 3 "hello"
Lo anterior devuelve hellohellohello
substr
Obtiene una subcadena de una cadena. Toma tres parámetros:
- inicio (int)
- fin (int)
- cadena (string)
substr 0 5 "hello world"
El resultado es hello
nospace
Elimina todos los espacios en blanco de una cadena.
nospace "hello w o r l d"
El resultado es helloworld
trunc
Trunca una cadena
trunc 5 "hello world"
Lo anterior produce hello.
trunc -5 "hello world"
Lo anterior produce world.
abbrev
Trunca una cadena con puntos suspensivos (...)
Parámetros:
- longitud máxima
- la cadena
abbrev 5 "hello world"
Lo anterior devuelve he..., ya que cuenta el ancho de los puntos suspensivos contra la
longitud máxima.
abbrevboth
Abrevia en ambos lados:
abbrevboth 5 10 "1234 5678 9123"
Lo anterior produce ...5678...
Toma:
- desplazamiento izquierdo
- longitud máxima
- la cadena
initials
Dadas múltiples palabras, toma la primera letra de cada palabra y las combina.
initials "First Try"
Esto devuelve FT
randAlphaNum, randAlpha, randNumeric, y randAscii
Estas cuatro funciones generan cadenas aleatorias criptográficamente seguras (usan crypto/rand),
pero con diferentes conjuntos de caracteres base:
randAlphaNumusa0-9a-zA-ZrandAlphausaa-zA-ZrandNumericusa0-9randAsciiusa todos los caracteres ASCII imprimibles
Cada una toma un parámetro: la longitud entera de la cadena.
randNumeric 3
Lo anterior producirá una cadena aleatoria con tres dígitos.
wrap
Ajusta el texto a un número de columnas dado:
wrap 80 $someText
Lo anterior ajustará la cadena en $someText a 80 columnas.
wrapWith
wrapWith funciona como wrap, pero le permite especificar la cadena con la que ajustar.
(wrap usa \n)
wrapWith 5 "\t" "Hello World"
Lo anterior produce Hello World (donde el espacio en blanco es un carácter de tabulación ASCII)
contains
Prueba si una cadena está contenida dentro de otra:
contains "cat" "catch"
Esto devuelve true porque catch contiene cat.
hasPrefix y hasSuffix
Las funciones hasPrefix y hasSuffix prueban si una cadena tiene un
prefijo o sufijo dado:
hasPrefix "cat" "catch"
Lo anterior devuelve true porque catch tiene el prefijo cat.
quote y squote
Estas funciones envuelven una cadena en comillas dobles (quote) o comillas simples
(squote).
cat
La función cat concatena múltiples cadenas en una, separándolas
con espacios:
cat "hello" "beautiful" "world"
Lo anterior produce hello beautiful world
indent
La función indent indenta cada línea en una cadena dada al ancho de
indentación especificado. Esto es útil cuando se alinean cadenas multilínea:
indent 4 $lots_of_text
Lo anterior indentará cada línea de texto con 4 caracteres de espacio.
nindent
La función nindent es igual que la función indent, pero antepone una nueva
línea al principio de la cadena.
nindent 4 $lots_of_text
Lo anterior indentará cada línea de texto con 4 caracteres de espacio y agregará una nueva línea al principio.
replace
Realiza un reemplazo simple de cadenas.
Toma tres argumentos:
- cadena a reemplazar
- cadena con la que reemplazar
- cadena fuente
"I Am Henry VIII" | replace " " "-"
Lo anterior producirá I-Am-Henry-VIII
plural
Pluraliza una cadena.
len $fish | plural "one anchovy" "many anchovies"
En el ejemplo anterior, si la longitud de la cadena es 1, se imprimirá el primer argumento
(one anchovy). De lo contrario, se imprimirá el segundo argumento (many anchovies).
Los argumentos son:
- cadena singular
- cadena plural
- entero de longitud
NOTA: Helm actualmente no soporta idiomas con reglas de pluralización más complejas.
Y 0 se considera plural porque el idioma inglés lo trata así
(zero anchovies).
snakecase
Convierte una cadena de camelCase a snake_case.
snakecase "FirstName"
Esto producirá first_name.
camelcase
Convierte una cadena de snake_case a CamelCase
camelcase "http_server"
Esto producirá HttpServer.
kebabcase
Convierte una cadena de camelCase a kebab-case.
kebabcase "FirstName"
Lo anterior producirá first-name.
swapcase
Intercambia las mayúsculas/minúsculas de una cadena usando un algoritmo basado en palabras.
Algoritmo de conversión:
- Carácter mayúscula se convierte a minúscula
- Carácter de título se convierte a minúscula
- Carácter minúscula después de espacio en blanco o al inicio se convierte a título
- Otros caracteres minúsculas se convierten a mayúsculas
- El espacio en blanco se define por unicode.IsSpace(char)
swapcase "This Is A.Test"
Lo anterior producirá tHIS iS a.tEST.
shuffle
Mezcla aleatoriamente una cadena.
shuffle "hello"
Lo anterior reordenará aleatoriamente las letras en hello, produciendo quizás oelhl.
Funciones de Conversión de Tipos
Helm proporciona las siguientes funciones de conversión de tipos:
atoi: Convierte una cadena a un entero.float64: Convierte afloat64.int: Convierte ainten el ancho del sistema.int64: Convierte aint64.toDecimal: Convierte un octal unix aint64.toString: Convierte a una cadena.toStrings: Convierte una lista, slice o arreglo a una lista de cadenas.toJson(mustToJson): Convierte lista, slice, arreglo, dict u objeto a JSON.toPrettyJson(mustToPrettyJson): Convierte lista, slice, arreglo, dict u objeto a JSON indentado.toRawJson(mustToRawJson): Convierte lista, slice, arreglo, dict u objeto a JSON con caracteres HTML sin escapar.fromYaml: Convierte una cadena YAML a un objeto.fromJson: Convierte una cadena JSON a un objeto.fromJsonArray: Convierte un arreglo JSON a una lista.toYaml: Convierte lista, slice, arreglo, dict u objeto a yaml indentado, puede usarse para copiar fragmentos de yaml de cualquier fuente. Esta función es equivalente a la función yaml.Marshal de GoLang, consulte la documentación aquí: https://pkg.go.dev/gopkg.in/yaml.v2#MarshaltoYamlPretty: Convierte lista, slice, arreglo, dict u objeto a yaml indentado. Equivalente atoYamlpero adicionalmente indentará listas por 2 espacios.toToml: Convierte lista, slice, arreglo, dict u objeto a toml, puede usarse para copiar fragmentos de toml de cualquier fuente.fromYamlArray: Convierte un arreglo YAML a una lista.
Solo atoi requiere que la entrada sea de un tipo específico. Las demás intentarán
convertir de cualquier tipo al tipo de destino. Por ejemplo, int64 puede
convertir flotantes a enteros, y también puede convertir cadenas a enteros.
toStrings
Dada una colección tipo lista, produce un slice de cadenas.
list 1 2 3 | toStrings
Lo anterior convierte 1 a "1", 2 a "2", y así sucesivamente, y luego los devuelve
como una lista.
toDecimal
Dado un permiso octal unix, produce un decimal.
"0777" | toDecimal
Lo anterior convierte 0777 a 511 y devuelve el valor como int64.
toJson, mustToJson
La función toJson codifica un elemento en una cadena JSON. Si el elemento no puede ser
convertido a JSON, la función devolverá una cadena vacía. mustToJson devolverá
un error en caso de que el elemento no pueda ser codificado en JSON.
toJson .Item
Lo anterior devuelve la representación en cadena JSON de .Item.
toPrettyJson, mustToPrettyJson
La función toPrettyJson codifica un elemento en una cadena JSON formateada (indentada).
toPrettyJson .Item
Lo anterior devuelve la representación en cadena JSON indentada de .Item.
toRawJson, mustToRawJson
La función toRawJson codifica un elemento en una cadena JSON con caracteres HTML
sin escapar.
toRawJson .Item
Lo anterior devuelve la representación en cadena JSON sin escapar de .Item.
fromYaml
La función fromYaml toma una cadena YAML y devuelve un objeto que puede usarse en plantillas.
Archivo en: yamls/person.yaml
name: Bob
age: 25
hobbies:
- hiking
- fishing
- cooking
{{- $person := .Files.Get "yamls/person.yaml" | fromYaml }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.
fromJson
La función fromJson toma una cadena JSON y devuelve un objeto que puede usarse en plantillas.
Archivo en: jsons/person.json
{
"name": "Bob",
"age": 25,
"hobbies": [
"hiking",
"fishing",
"cooking"
]
}
{{- $person := .Files.Get "jsons/person.json" | fromJson }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.
fromJsonArray
La función fromJsonArray toma un arreglo JSON y devuelve una lista que puede usarse en plantillas.
Archivo en: jsons/people.json
[
{ "name": "Bob","age": 25 },
{ "name": "Ram","age": 16 }
]
{{- $people := .Files.Get "jsons/people.json" | fromJsonArray }}
{{- range $person := $people }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
{{ end }}
toYaml, toYamlPretty
Las funciones toYaml y toYamlPretty codifican un objeto (lista, slice, arreglo, dict u objeto) en una cadena YAML indentada.
Note que
toYamlPrettyes funcionalmente equivalente pero mostrará YAML con indentación adicional para elementos de lista
# toYaml
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
# toYamlPretty
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
fromYamlArray
La función fromYamlArray toma un arreglo YAML y devuelve una lista que puede usarse en plantillas.
Archivo en: yamls/people.yml
- name: Bob
age: 25
- name: Ram
age: 16
{{- $people := .Files.Get "yamls/people.yml" | fromYamlArray }}
{{- range $person := $people }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
{{ end }}
Expresiones Regulares
Helm incluye las siguientes funciones de expresiones regulares: regexFind (mustRegexFind), regexFindAll (mustRegexFindAll), regexMatch (mustRegexMatch), regexReplaceAll (mustRegexReplaceAll), regexReplaceAllLiteral (mustRegexReplaceAllLiteral), regexSplit (mustRegexSplit).
regexMatch, mustRegexMatch
Devuelve true si la cadena de entrada contiene alguna coincidencia de la expresión regular.
regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com"
Lo anterior produce true
regexMatch entra en pánico si hay un problema y mustRegexMatch devuelve un error
al motor de plantillas si hay un problema.
regexFindAll, mustRegexFindAll
Devuelve un slice de todas las coincidencias de la expresión regular en la cadena de entrada. El último parámetro n determina el número de subcadenas a devolver, donde -1 significa devolver todas las coincidencias
regexFindAll "[2,4,6,8]" "123456789" -1
Lo anterior produce [2 4 6 8]
regexFindAll entra en pánico si hay un problema y mustRegexFindAll devuelve un
error al motor de plantillas si hay un problema.
regexFind, mustRegexFind
Devuelve la primera coincidencia (la más a la izquierda) de la expresión regular en la cadena de entrada
regexFind "[a-zA-Z][1-9]" "abcd1234"
Lo anterior produce d1
regexFind entra en pánico si hay un problema y mustRegexFind devuelve un error al
motor de plantillas si hay un problema.
regexReplaceAll, mustRegexReplaceAll
Devuelve una copia de la cadena de entrada, reemplazando las coincidencias de la Regexp con la
cadena de reemplazo. Dentro de la cadena de reemplazo, los signos $ se
interpretan como en Expand, por lo que por ejemplo $1 representa el texto de la primera
subcoincidencia. El primer argumento es <pattern>, el segundo es <input>,
y el tercero es <replacement>.
regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"
Lo anterior produce -W-xxW-
regexReplaceAll entra en pánico si hay un problema y mustRegexReplaceAll devuelve
un error al motor de plantillas si hay un problema.
regexReplaceAllLiteral, mustRegexReplaceAllLiteral
Devuelve una copia de la cadena de entrada, reemplazando las coincidencias de la Regexp con la
cadena de reemplazo. La cadena de reemplazo se sustituye directamente,
sin usar Expand. El primer argumento es <pattern>, el segundo es <input>,
y el tercero es <replacement>.
regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"
Lo anterior produce -${1}-${1}-
regexReplaceAllLiteral entra en pánico si hay un problema y
mustRegexReplaceAllLiteral devuelve un error al motor de plantillas si hay un
problema.
regexSplit, mustRegexSplit
Divide la cadena de entrada en subcadenas separadas por la expresión y devuelve
un slice de las subcadenas entre esas coincidencias de expresión. El último parámetro
n determina el número de subcadenas a devolver, donde -1 significa devolver todas
las coincidencias
regexSplit "z+" "pizza" -1
Lo anterior produce [pi a]
regexSplit entra en pánico si hay un problema y mustRegexSplit devuelve un error
al motor de plantillas si hay un problema.
Funciones de Criptografía y Seguridad
Helm proporciona algunas funciones criptográficas avanzadas. Incluyen adler32sum, buildCustomCert, decryptAES, derivePassword, encryptAES, genCA, genPrivateKey, genSelfSignedCert, genSignedCert, htpasswd, randBytes, sha1sum, y sha256sum.
sha1sum
La función sha1sum recibe una cadena y calcula su resumen SHA1.
sha1sum "Hello world!"
sha256sum
La función sha256sum recibe una cadena y calcula su resumen SHA256.
sha256sum "Hello world!"
Lo anterior calculará la suma SHA 256 en un formato "blindado ASCII" que es seguro para imprimir.
adler32sum
La función adler32sum recibe una cadena y calcula su suma de verificación Adler-32.
adler32sum "Hello world!"
htpasswd
La función htpasswd toma un username y password y genera un
hash bcrypt de la contraseña. El resultado puede usarse para autenticación básica
en un Servidor HTTP Apache.
htpasswd "myUser" "myPassword"
Note que es inseguro almacenar la contraseña directamente en la plantilla.
randBytes
La función randBytes acepta un conteo N y genera una secuencia aleatoria criptográficamente segura (usa crypto/rand) de N bytes. La secuencia se devuelve como una cadena codificada en base64.
randBytes 24
derivePassword
La función derivePassword puede usarse para derivar una contraseña específica basada en
algunas restricciones de "contraseña maestra" compartidas. El algoritmo para esto está bien
especificado.
derivePassword 1 "long" "password" "user" "example.com"
Note que se considera inseguro almacenar las partes directamente en la plantilla.
genPrivateKey
La función genPrivateKey genera una nueva clave privada codificada en un bloque PEM.
Toma uno de los valores para su primer parámetro:
ecdsa: Genera una clave DSA de curva elíptica (P256)dsa: Genera una clave DSA (L2048N256)rsa: Genera una clave RSA 4096
buildCustomCert
La función buildCustomCert permite personalizar el certificado.
Toma los siguientes parámetros de cadena:
- Un certificado en formato PEM codificado en base64
- Una clave privada en formato PEM codificada en base64
Devuelve un objeto de certificado con los siguientes atributos:
Cert: Un certificado codificado en PEMKey: Una clave privada codificada en PEM
Ejemplo:
$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"
Note que el objeto devuelto puede pasarse a la función genSignedCert para
firmar un certificado usando esta CA.
genCA
La función genCA genera una nueva autoridad de certificación x509 autofirmada.
Toma los siguientes parámetros:
- Nombre común del sujeto (cn)
- Duración de validez del certificado en días
Devuelve un objeto con los siguientes atributos:
Cert: Un certificado codificado en PEMKey: Una clave privada codificada en PEM
Ejemplo:
$ca := genCA "foo-ca" 365
Note que el objeto devuelto puede pasarse a la función genSignedCert para
firmar un certificado usando esta CA.
genSelfSignedCert
La función genSelfSignedCert genera un nuevo certificado x509 autofirmado.
Toma los siguientes parámetros:
- Nombre común del sujeto (cn)
- Lista opcional de IPs; puede ser nil
- Lista opcional de nombres DNS alternativos; puede ser nil
- Duración de validez del certificado en días
Devuelve un objeto con los siguientes atributos:
Cert: Un certificado codificado en PEMKey: Una clave privada codificada en PEM
Ejemplo:
$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365
genSignedCert
La función genSignedCert genera un nuevo certificado x509 firmado por la
CA especificada.
Toma los siguientes parámetros:
- Nombre común del sujeto (cn)
- Lista opcional de IPs; puede ser nil
- Lista opcional de nombres DNS alternativos; puede ser nil
- Duración de validez del certificado en días
- CA (ver
genCA)
Ejemplo:
$ca := genCA "foo-ca" 365
$cert := genSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 $ca
encryptAES
La función encryptAES cifra texto con AES-256 CBC y devuelve una cadena
codificada en base64.
encryptAES "secretkey" "plaintext"
decryptAES
La función decryptAES recibe una cadena base64 codificada por el algoritmo AES-256 CBC
y devuelve el texto descifrado.
"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"
Funciones de Fecha
Helm incluye las siguientes funciones de fecha que puede usar en plantillas: ago, date, dateInZone, dateModify (mustDateModify), duration, durationRound, htmlDate, htmlDateInZone, now, toDate (mustToDate), y unixEpoch.
now
La fecha/hora actual. Use esto en conjunto con otras funciones de fecha.
ago
La función ago devuelve la duración desde un momento en el tiempo. Ahora en resolución de segundos.
ago .CreatedAt
devuelve en formato String() de time.Duration
2h34m7s
date
La función date formatea una fecha.
Formatear la fecha a AÑO-MES-DÍA:
now | date "2006-01-02"
El formateo de fechas en Go es un poco diferente.
En resumen, tome esto como la fecha base:
Mon Jan 2 15:04:05 MST 2006
Escríbala en el formato que desee. Arriba, 2006-01-02 es la misma fecha, pero en
el formato que queremos.
dateInZone
Igual que date, pero con una zona horaria.
dateInZone "2006-01-02" (now) "UTC"
duration
Formatea una cantidad dada de segundos como time.Duration.
Esto devuelve 1m35s
duration "95"
durationRound
Redondea una duración dada a la unidad más significativa. Las cadenas y
time.Duration se parsean como duración, mientras que un time.Time se calcula como
la duración desde entonces.
Esto devuelve 2h
durationRound "2h10m5s"
Esto devuelve 3mo
durationRound "2400h10m5s"
unixEpoch
Devuelve los segundos desde el epoch unix para un time.Time.
now | unixEpoch
dateModify, mustDateModify
dateModify toma una modificación y una fecha y devuelve la marca de tiempo.
Restar una hora y treinta minutos del tiempo actual:
now | dateModify "-1.5h"
Si el formato de modificación es incorrecto, dateModify devolverá la fecha
sin modificar. mustDateModify devolverá un error en su lugar.
htmlDate
La función htmlDate formatea una fecha para insertarla en un campo de entrada
de selector de fecha HTML.
now | htmlDate
htmlDateInZone
Igual que htmlDate, pero con una zona horaria.
htmlDateInZone (now) "UTC"
toDate, mustToDate
toDate convierte una cadena a una fecha. El primer argumento es el layout de fecha y
el segundo la cadena de fecha. Si la cadena no puede convertirse, devuelve el valor
cero. mustToDate devolverá un error en caso de que la cadena no pueda convertirse.
Esto es útil cuando desea convertir una cadena de fecha a otro formato (usando pipe). El ejemplo siguiente convierte "2017-12-31" a "31/12/2017".
toDate "2006-01-02" "2017-12-31" | date "02/01/2006"
Funciones de Diccionarios y Dict
Helm proporciona un tipo de almacenamiento clave/valor llamado dict (abreviatura de "dictionary",
como en Python). Un dict es un tipo no ordenado.
La clave de un diccionario debe ser una cadena. Sin embargo, el valor puede ser de cualquier
tipo, incluso otro dict o list.
A diferencia de las lists, los dicts no son inmutables. Las funciones set y unset
modificarán el contenido de un diccionario.
Helm proporciona las siguientes funciones para trabajar con dicts: deepCopy (mustDeepCopy), dict, dig, get, hasKey, keys, merge (mustMerge), mergeOverwrite (mustMergeOverwrite), omit, pick, pluck, set, unset, y values.
dict
La creación de diccionarios se hace llamando a la función dict y pasándole una
lista de pares.
Lo siguiente crea un diccionario con tres elementos:
$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"
get
Dado un mapa y una clave, obtiene el valor del mapa.
get $myDict "name1"
Lo anterior devuelve "value1"
Note que si la clave no se encuentra, esta operación simplemente devolverá "". No se
generará ningún error.
set
Use set para agregar un nuevo par clave/valor a un diccionario.
$_ := set $myDict "name4" "value4"
Note que set devuelve el diccionario (un requisito de las funciones de plantilla de Go),
por lo que puede necesitar capturar el valor como se hizo arriba con la asignación $_.
unset
Dado un mapa y una clave, elimina la clave del mapa.
$_ := unset $myDict "name4"
Al igual que con set, esto devuelve el diccionario.
Note que si la clave no se encuentra, esta operación simplemente retornará. No se generará ningún error.
hasKey
La función hasKey devuelve true si el dict dado contiene la clave dada.
hasKey $myDict "name1"
Si la clave no se encuentra, devuelve false.
pluck
La función pluck hace posible dar una clave y múltiples mapas, y
obtener una lista de todas las coincidencias:
pluck "name1" $myDict $myOtherDict
Lo anterior devolverá una list que contiene cada valor encontrado ([value1 otherValue1]).
Si la clave dada no se encuentra en un mapa, ese mapa no tendrá un elemento en la
lista (y la longitud de la lista devuelta será menor que el número de dicts
en la llamada a pluck).
Si la clave se encuentra pero el valor es un valor vacío, ese valor se insertará.
Un patrón común en las plantillas de Helm es usar pluck... | first para obtener la primera
clave coincidente de una colección de diccionarios.
dig
La función dig recorre un conjunto anidado de dicts, seleccionando claves de una lista
de valores. Devuelve un valor por defecto si alguna de las claves no se encuentra en el
dict asociado.
dig "user" "role" "humanName" "guest" $dict
Dado un dict estructurado como
{
user: {
role: {
humanName: "curator"
}
}
}
lo anterior devolvería "curator". Si el dict careciera incluso de un campo user,
el resultado sería "guest".
Dig puede ser muy útil en casos donde le gustaría evitar cláusulas de guardia,
especialmente ya que el and del paquete de plantillas de Go no hace cortocircuito. Por ejemplo
and a.maybeNil a.maybeNil.iNeedThis siempre evaluará
a.maybeNil.iNeedThis, y entrará en pánico si a carece de un campo maybeNil.)
dig acepta su argumento dict al final para soportar pipelining. Por ejemplo:
merge a b c | dig "one" "two" "three" "<missing>"
merge, mustMerge
Combina dos o más diccionarios en uno, dando precedencia al diccionario de destino:
Dado:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
resultará en:
newdict:
default: default
overwrite: me
key: true
$newdict := merge $dest $source1 $source2
Esta es una operación de combinación profunda pero no una operación de copia profunda. Los objetos
anidados que se combinan son la misma instancia en ambos dicts. Si desea una copia profunda
junto con la combinación, entonces use la función deepCopy junto con la combinación. Por
ejemplo,
deepCopy $source | merge $dest
mustMerge devolverá un error en caso de una combinación fallida.
mergeOverwrite, mustMergeOverwrite
Combina dos o más diccionarios en uno, dando precedencia de derecha a izquierda, sobrescribiendo efectivamente valores en el diccionario de destino:
Dado:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
resultará en:
newdict:
default: default
overwrite: overwritten
key: false
$newdict := mergeOverwrite $dest $source1 $source2
Esta es una operación de combinación profunda pero no una operación de copia profunda. Los objetos
anidados que se combinan son la misma instancia en ambos dicts. Si desea una copia profunda
junto con la combinación, entonces use la función deepCopy junto con la combinación. Por
ejemplo,
deepCopy $source | mergeOverwrite $dest
mustMergeOverwrite devolverá un error en caso de una combinación fallida.
keys
La función keys devolverá una list de todas las claves en uno o más
tipos dict. Dado que un diccionario está desordenado, las claves no estarán en un
orden predecible. Pueden ordenarse con sortAlpha.
keys $myDict | sortAlpha
Al proporcionar múltiples diccionarios, las claves se concatenarán. Use la
función uniq junto con sortAlpha para obtener una lista única y ordenada de claves.
keys $myDict $myOtherDict | uniq | sortAlpha
pick
La función pick selecciona solo las claves dadas de un diccionario, creando un
nuevo dict.
$new := pick $myDict "name1" "name2"
Lo anterior devuelve {name1: value1, name2: value2}
omit
La función omit es similar a pick, excepto que devuelve un nuevo dict con
todas las claves que no coinciden con las claves dadas.
$new := omit $myDict "name1" "name3"
Lo anterior devuelve {name2: value2}
values
La función values es similar a keys, excepto que devuelve una nueva list con
todos los valores del dict fuente (solo se soporta un diccionario).
$vals := values $myDict
Lo anterior devuelve list["value1", "value2", "value 3"]. Note que la función values
no da garantías sobre el orden del resultado; si le importa esto,
entonces use sortAlpha.
deepCopy, mustDeepCopy
Las funciones deepCopy y mustDeepCopy toman un valor y hacen una copia profunda
del valor. Esto incluye dicts y otras estructuras. deepCopy entra en pánico cuando
hay un problema, mientras que mustDeepCopy devuelve un error al sistema de plantillas
cuando hay un error.
dict "a" 1 "b" 2 | deepCopy
Una Nota sobre los Internos de Dict
Un dict se implementa en Go como un map[string]interface{}. Los desarrolladores de Go pueden
pasar valores map[string]interface{} al contexto para hacerlos disponibles a
las plantillas como dicts.
Funciones de Codificación
Helm tiene las siguientes funciones de codificación y decodificación:
b64enc/b64dec: Codificar o decodificar con Base64b32enc/b32dec: Codificar o decodificar con Base32
Funciones de Listas y List
Helm proporciona un tipo list simple que puede contener listas secuenciales arbitrarias
de datos. Esto es similar a arreglos o slices, pero las listas están diseñadas para ser usadas
como tipos de datos inmutables.
Crear una lista de enteros:
$myList := list 1 2 3 4 5
Lo anterior crea una lista de [1 2 3 4 5].
Helm proporciona las siguientes funciones de lista: append (mustAppend), chunk, compact (mustCompact), concat, first (mustFirst), has (mustHas), initial (mustInitial), last (mustLast), prepend (mustPrepend), rest (mustRest), reverse (mustReverse), seq, index, slice (mustSlice), uniq (mustUniq), until, untilStep, y without (mustWithout).
first, mustFirst
Para obtener el primer elemento de una lista, use first.
first $myList devuelve 1
first entra en pánico si hay un problema, mientras que mustFirst devuelve un error al
motor de plantillas si hay un problema.
rest, mustRest
Para obtener la cola de la lista (todo excepto el primer elemento), use rest.
rest $myList devuelve [2 3 4 5]
rest entra en pánico si hay un problema, mientras que mustRest devuelve un error al
motor de plantillas si hay un problema.
last, mustLast
Para obtener el último elemento de una lista, use last:
last $myList devuelve 5. Esto es aproximadamente análogo a invertir una lista y
luego llamar a first.
initial, mustInitial
Esto complementa a last devolviendo todo excepto el último elemento. initial $myList devuelve [1 2 3 4].
initial entra en pánico si hay un problema, mientras que mustInitial devuelve un error al
motor de plantillas si hay un problema.
append, mustAppend
Agrega un nuevo elemento a una lista existente, creando una nueva lista.
$new = append $myList 6
Lo anterior establecería $new a [1 2 3 4 5 6]. $myList permanecería sin cambios.
append entra en pánico si hay un problema, mientras que mustAppend devuelve un error al
motor de plantillas si hay un problema.
prepend, mustPrepend
Inserta un elemento al principio de una lista, creando una nueva lista.
prepend $myList 0
Lo anterior produciría [0 1 2 3 4 5]. $myList permanecería sin cambios.
prepend entra en pánico si hay un problema, mientras que mustPrepend devuelve un error al
motor de plantillas si hay un problema.
concat
Concatena un número arbitrario de listas en una.
concat $myList ( list 6 7 ) ( list 8 )
Lo anterior produciría [1 2 3 4 5 6 7 8]. $myList permanecería sin cambios.
reverse, mustReverse
Produce una nueva lista con los elementos invertidos de la lista dada.
reverse $myList
Lo anterior generaría la lista [5 4 3 2 1].
reverse entra en pánico si hay un problema, mientras que mustReverse devuelve un error al
motor de plantillas si hay un problema.
uniq, mustUniq
Genera una lista con todos los duplicados eliminados.
list 1 1 1 2 | uniq
Lo anterior produciría [1 2]
uniq entra en pánico si hay un problema, mientras que mustUniq devuelve un error al
motor de plantillas si hay un problema.
without, mustWithout
La función without filtra elementos de una lista.
without $myList 3
Lo anterior produciría [1 2 4 5]
without puede tomar más de un filtro:
without $myList 1 3 5
Eso produciría [2 4]
without entra en pánico si hay un problema, mientras que mustWithout devuelve un error al
motor de plantillas si hay un problema.
has, mustHas
Prueba si una lista tiene un elemento particular.
has 4 $myList
Lo anterior devolvería true, mientras que has "hello" $myList devolvería false.
has entra en pánico si hay un problema, mientras que mustHas devuelve un error al
motor de plantillas si hay un problema.
compact, mustCompact
Acepta una lista y elimina entradas con valores vacíos.
$list := list 1 "a" "foo" ""
$copy := compact $list
compact devolverá una nueva lista con el elemento vacío (es decir, "") eliminado.
compact entra en pánico si hay un problema y mustCompact devuelve un error al
motor de plantillas si hay un problema.
index
Para obtener el elemento n-ésimo de una lista, use index list [n]. Para indexar en
listas multidimensionales, use index list [n] [m] ...
index $myList 0devuelve1. Es lo mismo quemyList[0]index $myList 0 1sería lo mismo quemyList[0][1]
slice, mustSlice
Para obtener elementos parciales de una lista, use slice list [n] [m]. Es equivalente a
list[n:m].
slice $myListdevuelve[1 2 3 4 5]. Es lo mismo quemyList[:].slice $myList 3devuelve[4 5]. Es lo mismo quemyList[3:].slice $myList 1 3devuelve[2 3]. Es lo mismo quemyList[1:3].slice $myList 0 3devuelve[1 2 3]. Es lo mismo quemyList[:3].
slice entra en pánico si hay un problema, mientras que mustSlice devuelve un error al
motor de plantillas si hay un problema.
until
La función until construye un rango de enteros.
until 5
Lo anterior genera la lista [0, 1, 2, 3, 4].
Esto es útil para iterar con range $i, $e := until 5.
untilStep
Como until, untilStep genera una lista de enteros contando. Pero le permite
definir un inicio, fin y paso:
untilStep 3 6 2
Lo anterior producirá [3 5] comenzando con 3 y sumando 2 hasta que sea
igual o mayor que 6. Esto es similar a la función range de Python.
seq
Funciona como el comando seq de bash.
- 1 parámetro (fin) - generará todos los enteros contando entre 1 y
fininclusive. - 2 parámetros (inicio, fin) - generará todos los enteros contando entre
inicioyfininclusive incrementando o decrementando en 1. - 3 parámetros (inicio, paso, fin) - generará todos los enteros contando entre
inicioyfininclusive incrementando o decrementando enpaso.
seq 5 => 1 2 3 4 5
seq -3 => 1 0 -1 -2 -3
seq 0 2 => 0 1 2
seq 2 -2 => 2 1 0 -1 -2
seq 0 2 10 => 0 2 4 6 8 10
seq 0 -2 -5 => 0 -2 -4
chunk
Para dividir una lista en fragmentos de un tamaño dado, use chunk size list. Esto es útil para paginación.
chunk 3 (list 1 2 3 4 5 6 7 8)
Esto produce una lista de listas [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ].
Funciones Matemáticas
Todas las funciones matemáticas operan con valores int64 a menos que se especifique lo contrario.
Las siguientes funciones matemáticas están disponibles: add, add1, ceil, div, floor, len, max, min, mod, mul, round, y sub.
add
Suma números con add. Acepta dos o más entradas.
add 1 2 3
add1
Para incrementar en 1, use add1.
sub
Para restar, use sub.
div
Realiza división entera con div.
mod
Módulo con mod.
mul
Multiplica con mul. Acepta dos o más entradas.
mul 1 2 3
max
Devuelve el mayor de una serie de enteros.
Esto devolverá 3:
max 1 2 3
min
Devuelve el menor de una serie de enteros.
min 1 2 3 devolverá 1.
len
Devuelve la longitud del argumento como un entero.
len .Arg
Funciones Matemáticas de Punto Flotante
Todas las funciones matemáticas operan con valores float64.
addf
Suma números con addf
Esto devolverá 5.5:
addf 1.5 2 2
add1f
Para incrementar en 1, use add1f
subf
Para restar, use subf
Esto es equivalente a 7.5 - 2 - 3 y devolverá 2.5:
subf 7.5 2 3
divf
Realiza división con divf
Esto es equivalente a 10 / 2 / 4 y devolverá 1.25:
divf 10 2 4
mulf
Multiplica con mulf
Esto devolverá 6:
mulf 1.5 2 2
maxf
Devuelve el mayor de una serie de flotantes:
Esto devolverá 3:
maxf 1 2.5 3
minf
Devuelve el menor de una serie de flotantes.
Esto devolverá 1.5:
minf 1.5 2 3
floor
Devuelve el mayor valor flotante menor o igual al valor de entrada.
floor 123.9999 devolverá 123.0.
ceil
Devuelve el mayor valor flotante mayor o igual al valor de entrada.
ceil 123.001 devolverá 124.0.
round
Devuelve un valor flotante con el resto redondeado al número dado de dígitos después del punto decimal.
round 123.555555 3 devolverá 123.556.
Funciones de Red
Helm tiene una única función de red, getHostByName.
getHostByName recibe un nombre de dominio y devuelve la dirección ip.
getHostByName "www.google.com" devolvería la dirección ip correspondiente de www.google.com.
Esta función requiere que se pase la opción --enable-dns en la línea de comandos de helm.
Funciones de Rutas de Archivos
Aunque las funciones de plantilla de Helm no otorgan acceso al sistema de archivos, sí proporcionan funciones para trabajar con cadenas que siguen convenciones de rutas de archivos. Estas incluyen base, clean, dir, ext, e isAbs.
base
Devuelve el último elemento de una ruta.
base "foo/bar/baz"
Lo anterior imprime "baz".
dir
Devuelve el directorio, eliminando la última parte de la ruta. Así que dir "foo/bar/baz" devuelve foo/bar.
clean
Limpia una ruta.
clean "foo/bar/../baz"
Lo anterior resuelve el .. y devuelve foo/baz.
ext
Devuelve la extensión del archivo.
ext "foo.bar"
Lo anterior devuelve .bar.
isAbs
Para verificar si una ruta de archivo es absoluta, use isAbs.
Funciones de Reflexión
Helm proporciona herramientas de reflexión rudimentarias. Estas ayudan a los desarrolladores avanzados de plantillas a entender la información de tipo de Go subyacente para un valor particular. Helm está escrito en Go y tiene tipado fuerte. El sistema de tipos aplica dentro de las plantillas.
Go tiene varios kinds primitivos, como string, slice, int64, y bool.
Go tiene un sistema de tipos abierto que permite a los desarrolladores crear sus propios tipos.
Helm proporciona un conjunto de funciones para cada uno a través de funciones kind y funciones type. También se proporciona una función deepEqual para comparar dos valores.
Funciones Kind
Hay dos funciones Kind: kindOf devuelve el kind de un objeto.
kindOf "hello"
Lo anterior devolvería string. Para pruebas simples (como en bloques if), la
función kindIs le permitirá verificar que un valor es de un kind particular:
kindIs "int" 123
Lo anterior devolverá true.
Funciones Type
Los tipos son ligeramente más difíciles de trabajar, por lo que hay tres funciones diferentes:
typeOfdevuelve el tipo subyacente de un valor:typeOf $footypeIses comokindIs, pero para tipos:typeIs "*io.Buffer" $myValtypeIsLikefunciona comotypeIs, excepto que también desreferencia punteros
Nota: Ninguna de estas puede probar si algo implementa una interfaz dada, ya que hacerlo requeriría compilar la interfaz por adelantado.
deepEqual
deepEqual devuelve true si dos valores son "profundamente
iguales"
Funciona también para tipos no primitivos (comparado con el eq incorporado).
deepEqual (list 1 2 3) (list 1 2 3)
Lo anterior devolverá true.
Funciones de Versiones Semánticas
Algunos esquemas de versiones son fácilmente parseables y comparables. Helm proporciona funciones para trabajar con versiones SemVer 2. Estas incluyen semver y semverCompare. A continuación también encontrará detalles sobre el uso de rangos para comparaciones.
semver
La función semver parsea una cadena en una Versión Semántica:
$version := semver "1.2.3-alpha.1+123"
Si el parser falla, causará que la ejecución de la plantilla se detenga con un error.
En este punto, $version es un puntero a un objeto Version con las siguientes
propiedades:
$version.Major: El número mayor (1arriba)$version.Minor: El número menor (2arriba)$version.Patch: El número de parche (3arriba)$version.Prerelease: El prerelease (alpha.1arriba)$version.Metadata: Los metadatos de compilación (123arriba)$version.Original: La versión original como cadena
Además, puede comparar una Version con otra version usando la
función Compare:
semver "1.4.3" | (semver "1.2.3").Compare
Lo anterior devolverá -1.
Los valores de retorno son:
-1si la semver dada es mayor que la semver cuyo métodoComparefue llamado1si la versión cuya funciónComparefue llamada es mayor.0si son la misma versión
(Note que en SemVer, el campo Metadata no se compara durante las operaciones de
comparación de versiones.)
semverCompare
Se proporciona una función de comparación más robusta como semverCompare. Esta versión
soporta rangos de versiones:
semverCompare "1.2.3" "1.2.3"comprueba una coincidencia exactasemverCompare "~1.2.0" "1.2.3"comprueba que las versiones mayor y menor coincidan, y que el número de parche de la segunda versión sea mayor o igual al primer parámetro.
Las funciones SemVer usan la biblioteca semver de Masterminds, de los creadores de Sprig.
Comparaciones Básicas
Hay dos elementos en las comparaciones. Primero, una cadena de comparación es una lista
de comparaciones AND separadas por espacios o comas. Estas luego se separan por || (OR)
comparaciones. Por ejemplo, ">= 1.2 < 3.0.0 || >= 4.2.3" busca una
comparación que sea mayor o igual a 1.2 y menor que 3.0.0 o sea mayor
o igual a 4.2.3.
Las comparaciones básicas son:
=: igual (alias de ningún operador)!=: no igual>: mayor que<: menor que>=: mayor o igual que<=: menor o igual que
Trabajando con Versiones Prerelease
Los prereleases, para aquellos no familiarizados con ellos, se usan para lanzamientos de software
antes de lanzamientos estables o disponibles de forma general. Ejemplos de prereleases incluyen
lanzamientos de desarrollo, alpha, beta y release candidate. Un prerelease puede ser una
versión como 1.2.3-beta.1, mientras que el lanzamiento estable sería 1.2.3. En el
orden de precedencia, los prereleases vienen antes de sus lanzamientos asociados. En este
ejemplo 1.2.3-beta.1 < 1.2.3.
Según la especificación de Versiones Semánticas, los prereleases pueden no ser compatibles con la API de su contraparte de lanzamiento. Dice,
Una versión prerelease indica que la versión es inestable y podría no satisfacer los requisitos de compatibilidad previstos como lo denota su versión normal asociada.
Las comparaciones de SemVer usando restricciones sin un comparador de prerelease omitirán
las versiones prerelease. Por ejemplo, >=1.2.3 omitirá prereleases al buscar
en una lista de lanzamientos, mientras que >=1.2.3-0 evaluará y encontrará prereleases.
La razón del 0 como versión prerelease en la comparación de ejemplo es
porque los prereleases solo pueden contener alfanuméricos ASCII y guiones (junto
con separadores .), según la especificación. El ordenamiento ocurre en orden ASCII,
nuevamente según la especificación. El carácter más bajo es un 0 en el orden ASCII (vea una Tabla
ASCII)
Entender el ordenamiento ASCII es importante porque A-Z viene antes de a-z.
Eso significa que >=1.2.3-BETA devolverá 1.2.3-alpha. Lo que podría esperar de la
sensibilidad a mayúsculas no aplica aquí. Esto se debe al ordenamiento ASCII que es lo que
la especificación indica.
Comparaciones de Rango con Guion
Hay múltiples métodos para manejar rangos y el primero son los rangos con guion. Estos se ven así:
1.2 - 1.4.5que es equivalente a>= 1.2 <= 1.4.52.3.4 - 4.5que es equivalente a>= 2.3.4 <= 4.5
Comodines en Comparaciones
Los caracteres x, X, y * pueden usarse como comodines. Esto funciona
para todos los operadores de comparación. Cuando se usa en el operador = se retrocede al
nivel de comparación de parche (ver tilde abajo). Por ejemplo,
1.2.xes equivalente a>= 1.2.0, < 1.3.0>= 1.2.xes equivalente a>= 1.2.0<= 2.xes equivalente a< 3*es equivalente a>= 0.0.0
Comparaciones de Rango Tilde (Parche)
El operador de comparación tilde (~) es para rangos a nivel de parche cuando se especifica una versión
menor y cambios a nivel mayor cuando falta el número menor.
Por ejemplo,
~1.2.3es equivalente a>= 1.2.3, < 1.3.0~1es equivalente a>= 1, < 2~2.3es equivalente a>= 2.3, < 2.4~1.2.xes equivalente a>= 1.2.0, < 1.3.0~1.xes equivalente a>= 1, < 2
Comparaciones de Rango Circunflejo (Mayor)
El operador de comparación circunflejo (^) es para cambios a nivel mayor una vez que ha ocurrido un
lanzamiento estable (1.0.0). Antes de un lanzamiento 1.0.0, las versiones menores actúan
como el nivel de estabilidad de la API. Esto es útil cuando las comparaciones de versiones de API como un
cambio mayor es un cambio que rompe la API. Por ejemplo,
^1.2.3es equivalente a>= 1.2.3, < 2.0.0^1.2.xes equivalente a>= 1.2.0, < 2.0.0^2.3es equivalente a>= 2.3, < 3^2.xes equivalente a>= 2.0.0, < 3^0.2.3es equivalente a>=0.2.3 <0.3.0^0.2es equivalente a>=0.2.0 <0.3.0^0.0.3es equivalente a>=0.0.3 <0.0.4^0.0es equivalente a>=0.0.0 <0.1.0^0es equivalente a>=0.0.0 <1.0.0
Funciones de URL
Helm incluye las funciones urlParse, urlJoin, y urlquery que le permiten trabajar con partes de URL.
urlParse
Parsea una cadena para URL y produce un dict con las partes de la URL
urlParse "http://admin:secret@server.com:8080/api?list=false#anchor"
Lo anterior devuelve un dict, conteniendo un objeto URL:
scheme: 'http'
host: 'server.com:8080'
path: '/api'
query: 'list=false'
opaque: nil
fragment: 'anchor'
userinfo: 'admin:secret'
Esto se implementa usando los paquetes URL de la biblioteca estándar de Go. Para más información, consulte https://golang.org/pkg/net/url/#URL
urlJoin
Une un mapa (producido por urlParse) para producir una cadena URL
urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http")
Lo anterior devuelve la siguiente cadena:
http://host:80/path?query#fragment
urlquery
Devuelve la versión escapada del valor pasado como argumento para que sea adecuado para incrustar en la parte de query de una URL.
$var := urlquery "string for query"
Funciones de UUID
Helm puede generar IDs universalmente únicos UUID v4.
uuidv4
Lo anterior devuelve un nuevo UUID del tipo v4 (generado aleatoriamente).
Funciones de Kubernetes y Chart
Helm incluye funciones para trabajar con Kubernetes incluyendo .Capabilities.APIVersions.Has, Files, y lookup.
lookup
lookup se usa para buscar recursos en un clúster en ejecución. Cuando se usa con el
comando helm template siempre devuelve una respuesta vacía.
Puede encontrar más detalles en la documentación sobre la función lookup.
.Capabilities.APIVersions.Has
Devuelve si una versión de API o recurso está disponible en un clúster.
.Capabilities.APIVersions.Has "apps/v1"
.Capabilities.APIVersions.Has "apps/v1/Deployment"
Más información está disponible en la documentación de objetos incorporados.
Funciones de Archivos
Hay varias funciones que le permiten acceder a archivos no especiales dentro de un chart. Por ejemplo, para acceder a archivos de configuración de aplicaciones. Estas están documentadas en Acceder a Archivos Dentro de Plantillas.
Nota, la documentación para muchas de estas funciones proviene de Sprig. Sprig es una biblioteca de funciones de plantilla disponible para aplicaciones Go.