Lista de Funções de Template
O Helm inclui muitas funções de template que você pode utilizar em seus templates. Elas estão listadas aqui e organizadas nas seguintes categorias:
- Criptográficas e de Segurança
- Data
- Dicionários
- Codificação
- Caminhos de Arquivo
- Kubernetes e Chart
- Lógica e Controle de Fluxo
- Listas
- Matemática
- Matemática com Float
- Rede
- Reflexão
- Expressões Regulares
- Versões Semânticas
- String
- Conversão de Tipos
- URL
- UUID
Funções de Lógica e Controle de Fluxo
O Helm inclui diversas funções de lógica e controle de fluxo, incluindo and, coalesce, default, empty, eq, fail, ge, gt, le, lt, ne, not, or e required.
and
Retorna o AND booleano de dois ou mais argumentos (o primeiro argumento vazio, ou o último argumento).
and .Arg1 .Arg2
or
Retorna o OR booleano de dois ou mais argumentos (o primeiro argumento não vazio, ou o último argumento).
or .Arg1 .Arg2
not
Retorna a negação booleana do seu argumento.
not .Arg
eq
Retorna a igualdade booleana dos argumentos (ex.: Arg1 == Arg2).
eq .Arg1 .Arg2
ne
Retorna a desigualdade booleana dos argumentos (ex.: Arg1 != Arg2)
ne .Arg1 .Arg2
lt
Retorna verdadeiro se o primeiro argumento for menor que o segundo. Caso contrário, retorna falso (ex.: Arg1 < Arg2).
lt .Arg1 .Arg2
le
Retorna verdadeiro se o primeiro argumento for menor ou igual ao segundo. Caso contrário, retorna falso (ex.: Arg1 <= Arg2).
le .Arg1 .Arg2
gt
Retorna verdadeiro se o primeiro argumento for maior que o segundo. Caso contrário, retorna falso (ex.: Arg1 > Arg2).
gt .Arg1 .Arg2
ge
Retorna verdadeiro se o primeiro argumento for maior ou igual ao segundo. Caso contrário, retorna falso (ex.: Arg1 >= Arg2).
ge .Arg1 .Arg2
default
Para definir um valor padrão simples, use default:
default "foo" .Bar
No exemplo acima, se .Bar for avaliado como um valor não vazio, ele será
usado. Mas se estiver vazio, foo será retornado em seu lugar.
A definição de "vazio" depende do tipo:
- Numérico: 0
- String: ""
- Listas:
[] - Dicts:
{} - Booleano:
false - E sempre
nil(também conhecido como null)
Para structs, não há definição de vazio, então uma struct nunca retornará o valor padrão.
required
Especifique valores que devem ser definidos com required:
required "A valid foo is required!" .Bar
Se .Bar estiver vazio ou não definido (veja default para saber como isso é
avaliado), o template não será renderizado e retornará a mensagem de erro
fornecida.
empty
A função empty retorna true se o valor fornecido for considerado vazio, e
false caso contrário. Os valores vazios estão listados na seção default.
empty .Foo
Note que em condicionais de templates Go, o vazio é calculado automaticamente.
Assim, raramente você precisará usar if not empty .Foo. Em vez disso, use
apenas if .Foo.
fail
Retorna incondicionalmente uma string vazia e um error com o texto
especificado. Isso é útil em cenários onde outras condicionais determinaram que
a renderização do template deve falhar.
fail "Please accept the end user license agreement"
coalesce
A função coalesce recebe uma lista de valores e retorna o primeiro que não
estiver vazio.
coalesce 0 1 2
O exemplo acima retorna 1.
Esta função é útil para verificar múltiplas variáveis ou valores:
coalesce .name .parent.name "Matt"
O exemplo acima primeiro verificará se .name está vazio. Se não estiver,
retornará esse valor. Se estiver vazio, coalesce avaliará .parent.name
para verificar se está vazio. Finalmente, se tanto .name quanto .parent.name
estiverem vazios, retornará Matt.
ternary
A função ternary recebe dois valores e um valor de teste. Se o valor de teste
for verdadeiro, o primeiro valor será retornado. Se o valor de teste estiver
vazio, o segundo valor será retornado. Isso é semelhante ao operador ternário em
C e outras linguagens de programação.
valor de teste verdadeiro
ternary "foo" "bar" true
ou
true | ternary "foo" "bar"
O exemplo acima retorna "foo".
valor de teste falso
ternary "foo" "bar" false
ou
false | ternary "foo" "bar"
O exemplo acima retorna "bar".
Funções de String
O Helm inclui as seguintes funções de string: 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 e wrapWith.
print
Retorna uma string a partir da combinação de suas partes.
print "Matt has " .Dogs " dogs"
Tipos que não são strings são convertidos para strings quando possível.
Note que quando dois argumentos adjacentes não são strings, um espaço é adicionado entre eles.
println
Funciona da mesma forma que print, mas adiciona uma nova linha no final.
printf
Retorna uma string baseada em uma string de formatação e nos argumentos passados a ela em ordem.
printf "%s has %d dogs." .Name .NumberDogs
O placeholder a ser usado depende do tipo do argumento que está sendo passado. Isso inclui:
Propósito geral:
%vo valor em um formato padrão- ao imprimir dicts, a flag plus (%+v) adiciona nomes de campos
%%um sinal de porcentagem literal; não consome nenhum valor
Booleano:
%ta palavra true ou false
Inteiro:
%bbase 2%co caractere representado pelo ponto de código Unicode correspondente%dbase 10%obase 8%Obase 8 com prefixo 0o%qum caractere literal entre aspas simples, escapado de forma segura%xbase 16, com letras minúsculas para a-f%Xbase 16, com letras maiúsculas para A-F%Uformato Unicode: U+1234; mesmo que "U+%04X"
Ponto flutuante e constituintes complexos:
%bnotação científica decimal com expoente sendo potência de dois, ex.: -123456p-78%enotação científica, ex.: -1.234456e+78%Enotação científica, ex.: -1.234456E+78%fponto decimal sem expoente, ex.: 123.456%Fsinônimo para %f%g%e para expoentes grandes, %f caso contrário.%G%E para expoentes grandes, %F caso contrário%xnotação hexadecimal (com expoente decimal de potência de dois), ex.: -0x1.23abcp+20%Xnotação hexadecimal maiúscula, ex.: -0X1.23ABCP+20
String e slice de bytes (tratados de forma equivalente com estes verbos):
%sos bytes não interpretados da string ou slice%quma string entre aspas duplas, escapada de forma segura%xbase 16, minúsculo, dois caracteres por byte%Xbase 16, maiúsculo, dois caracteres por byte
Slice:
%pendereço do elemento 0 em notação base 16, com 0x inicial
trim
A função trim remove espaços em branco de ambos os lados de uma string:
trim " hello "
O exemplo acima produz hello
trimAll
Remove os caracteres especificados do início e do final de uma string:
trimAll "$" "$5.00"
O exemplo acima retorna 5.00 (como uma string).
trimPrefix
Remove apenas o prefixo de uma string:
trimPrefix "-" "-hello"
O exemplo acima retorna hello
trimSuffix
Remove apenas o sufixo de uma string:
trimSuffix "-" "hello-"
O exemplo acima retorna hello
lower
Converte toda a string para minúsculas:
lower "HELLO"
O exemplo acima retorna hello
upper
Converte toda a string para maiúsculas:
upper "hello"
O exemplo acima retorna HELLO
title
Converte para formato de título:
title "hello world"
O exemplo acima retorna Hello World
untitle
Remove a formatação de título. untitle "Hello World" produz hello world.
repeat
Repete uma string múltiplas vezes:
repeat 3 "hello"
O exemplo acima retorna hellohellohello
substr
Obtém uma substring de uma string. Recebe três parâmetros:
- start (int)
- end (int)
- string (string)
substr 0 5 "hello world"
O exemplo acima retorna hello
nospace
Remove todos os espaços em branco de uma string.
nospace "hello w o r l d"
O exemplo acima retorna helloworld
trunc
Trunca uma string
trunc 5 "hello world"
O exemplo acima produz hello.
trunc -5 "hello world"
O exemplo acima produz world.
abbrev
Trunca uma string com reticências (...)
Parâmetros:
- comprimento máximo
- a string
abbrev 5 "hello world"
O exemplo acima retorna he..., pois conta a largura das reticências contra o
comprimento máximo.
abbrevboth
Abrevia em ambos os lados:
abbrevboth 5 10 "1234 5678 9123"
O exemplo acima produz ...5678...
Recebe:
- deslocamento à esquerda
- comprimento máximo
- a string
initials
Dadas múltiplas palavras, pega a primeira letra de cada palavra e as combina.
initials "First Try"
O exemplo acima retorna FT
randAlphaNum, randAlpha, randNumeric e randAscii
Estas quatro funções geram strings aleatórias criptograficamente seguras (usam
crypto/rand), mas com diferentes conjuntos de caracteres base:
randAlphaNumusa0-9a-zA-ZrandAlphausaa-zA-ZrandNumericusa0-9randAsciiusa todos os caracteres ASCII imprimíveis
Cada uma delas recebe um parâmetro: o comprimento inteiro da string.
randNumeric 3
O exemplo acima produzirá uma string aleatória com três dígitos.
wrap
Quebra texto em uma contagem de colunas especificada:
wrap 80 $someText
O exemplo acima quebrará a string em $someText em 80 colunas.
wrapWith
wrapWith funciona como wrap, mas permite especificar a string usada para
quebrar. (wrap usa \n)
wrapWith 5 "\t" "Hello World"
O exemplo acima produz Hello World (onde o espaço em branco é um caractere de
tabulação ASCII)
contains
Testa se uma string está contida dentro de outra:
contains "cat" "catch"
O exemplo acima retorna true porque catch contém cat.
hasPrefix e hasSuffix
As funções hasPrefix e hasSuffix testam se uma string tem um determinado
prefixo ou sufixo:
hasPrefix "cat" "catch"
O exemplo acima retorna true porque catch tem o prefixo cat.
quote e squote
Estas funções envolvem uma string em aspas duplas (quote) ou aspas simples
(squote).
cat
A função cat concatena múltiplas strings em uma, separando-as com espaços:
cat "hello" "beautiful" "world"
O exemplo acima produz hello beautiful world
indent
A função indent indenta cada linha de uma string com a largura de indentação
especificada. Isso é útil ao alinhar strings de múltiplas linhas:
indent 4 $lots_of_text
O exemplo acima indentará cada linha de texto com 4 caracteres de espaço.
nindent
A função nindent é igual à função indent, mas adiciona uma nova linha no
início da string.
nindent 4 $lots_of_text
O exemplo acima indentará cada linha de texto com 4 caracteres de espaço e adicionará uma nova linha no início.
replace
Realiza substituição simples de string.
Recebe três argumentos:
- string a ser substituída
- string de substituição
- string fonte
"I Am Henry VIII" | replace " " "-"
O exemplo acima produzirá I-Am-Henry-VIII
plural
Pluraliza uma string.
len $fish | plural "one anchovy" "many anchovies"
No exemplo acima, se o comprimento da string for 1, o primeiro argumento será
impresso (one anchovy). Caso contrário, o segundo argumento será impresso
(many anchovies).
Os argumentos são:
- string singular
- string plural
- inteiro de comprimento
NOTA: O Helm atualmente não suporta idiomas com regras de pluralização mais
complexas. E 0 é considerado plural porque o idioma inglês o trata assim
(zero anchovies).
snakecase
Converte string de camelCase para snake_case.
snakecase "FirstName"
O exemplo acima produzirá first_name.
camelcase
Converte string de snake_case para CamelCase
camelcase "http_server"
O exemplo acima produzirá HttpServer.
kebabcase
Converte string de camelCase para kebab-case.
kebabcase "FirstName"
O exemplo acima produzirá first-name.
swapcase
Troca o caso de uma string usando um algoritmo baseado em palavras.
Algoritmo de conversão:
- Caractere maiúsculo converte para minúsculo
- Caractere de título converte para minúsculo
- Caractere minúsculo após espaço em branco ou no início converte para título
- Outro caractere minúsculo converte para maiúsculo
- Espaço em branco é definido por unicode.IsSpace(char)
swapcase "This Is A.Test"
O exemplo acima produzirá tHIS iS a.tEST.
shuffle
Embaralha uma string.
shuffle "hello"
O exemplo acima randomizará as letras em hello, possivelmente produzindo
oelhl.
Funções de Conversão de Tipos
As seguintes funções de conversão de tipos são fornecidas pelo Helm:
atoi: Converte uma string para um inteiro.float64: Converte para umfloat64.int: Converte para umintcom a largura do sistema.int64: Converte para umint64.toDecimal: Converte um octal unix para umint64.toString: Converte para uma string.toStrings: Converte uma list, slice ou array para uma lista de strings.toJson(mustToJson): Converte list, slice, array, dict ou objeto para JSON.toPrettyJson(mustToPrettyJson): Converte list, slice, array, dict ou objeto para JSON indentado.toRawJson(mustToRawJson): Converte list, slice, array, dict ou objeto para JSON com caracteres HTML não escapados.fromYaml: Converte uma string YAML para um objeto.fromJson: Converte uma string JSON para um objeto.fromJsonArray: Converte um array JSON para uma lista.toYaml: Converte list, slice, array, dict ou objeto para yaml indentado, pode ser usado para copiar trechos de yaml de qualquer fonte. Esta função é equivalente à função GoLang yaml.Marshal, veja a documentação aqui: https://pkg.go.dev/gopkg.in/yaml.v2#MarshaltoYamlPretty: Converte list, slice, array, dict ou objeto para yaml indentado. Equivalente atoYaml, mas adicionalmente indenta listas em 2 espaços.toToml: Converte list, slice, array, dict ou objeto para toml, pode ser usado para copiar trechos de toml de qualquer fonte.fromYamlArray: Converte um array YAML para uma lista.
Apenas atoi requer que a entrada seja de um tipo específico. As outras
tentarão converter de qualquer tipo para o tipo de destino. Por exemplo, int64
pode converter floats para ints, e também pode converter strings para ints.
toStrings
Dada uma coleção similar a lista, produz uma slice de strings.
list 1 2 3 | toStrings
O exemplo acima converte 1 para "1", 2 para "2", e assim por diante, e
então os retorna como uma lista.
toDecimal
Dada uma permissão octal unix, produz um decimal.
"0777" | toDecimal
O exemplo acima converte 0777 para 511 e retorna o valor como um int64.
toJson, mustToJson
A função toJson codifica um item em uma string JSON. Se o item não puder ser
convertido para JSON, a função retornará uma string vazia. mustToJson
retornará um erro caso o item não possa ser codificado em JSON.
toJson .Item
O exemplo acima retorna a representação em string JSON de .Item.
toPrettyJson, mustToPrettyJson
A função toPrettyJson codifica um item em uma string JSON formatada
(indentada).
toPrettyJson .Item
O exemplo acima retorna a representação indentada em string JSON de .Item.
toRawJson, mustToRawJson
A função toRawJson codifica um item em uma string JSON com caracteres HTML não
escapados.
toRawJson .Item
O exemplo acima retorna a representação em string JSON não escapada de .Item.
fromYaml
A função fromYaml recebe uma string YAML e retorna um objeto que pode ser
usado em templates.
Arquivo em: 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
A função fromJson recebe uma string JSON e retorna um objeto que pode ser
usado em templates.
Arquivo em: 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
A função fromJsonArray recebe um Array JSON e retorna uma lista que pode ser
usada em templates.
Arquivo em: 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
As funções toYaml e toYamlPretty codificam um objeto (list, slice, array,
dict ou objeto) em uma string YAML indentada.
Note que
toYamlPrettyé funcionalmente equivalente, mas produzirá YAML com indentação adicional para elementos de lista
# toYaml
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
# toYamlPretty
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
fromYamlArray
A função fromYamlArray recebe um Array YAML e retorna uma lista que pode ser
usada em templates.
Arquivo em: 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 }}
Expressões Regulares
O Helm inclui as seguintes funções de expressões regulares: regexFind (mustRegexFind), regexFindAll (mustRegexFindAll), regexMatch (mustRegexMatch), regexReplaceAll (mustRegexReplaceAll), regexReplaceAllLiteral (mustRegexReplaceAllLiteral), regexSplit (mustRegexSplit).
regexMatch, mustRegexMatch
Retorna true se a string de entrada contiver qualquer correspondência da expressão regular.
regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com"
O exemplo acima produz true
regexMatch causa panic se houver um problema e mustRegexMatch retorna um
erro para o motor de templates se houver um problema.
regexFindAll, mustRegexFindAll
Retorna uma slice de todas as correspondências da expressão regular na string de entrada. O último parâmetro n determina o número de substrings a retornar, onde -1 significa retornar todas as correspondências
regexFindAll "[2,4,6,8]" "123456789" -1
O exemplo acima produz [2 4 6 8]
regexFindAll causa panic se houver um problema e mustRegexFindAll retorna
um erro para o motor de templates se houver um problema.
regexFind, mustRegexFind
Retorna a primeira (mais à esquerda) correspondência da expressão regular na string de entrada
regexFind "[a-zA-Z][1-9]" "abcd1234"
O exemplo acima produz d1
regexFind causa panic se houver um problema e mustRegexFind retorna um erro
para o motor de templates se houver um problema.
regexReplaceAll, mustRegexReplaceAll
Retorna uma cópia da string de entrada, substituindo correspondências da Regexp
pela string de substituição. Dentro da string de substituição, sinais $ são
interpretados como em Expand, então, por exemplo, $1 representa o texto da
primeira subcorrespondência. O primeiro argumento é <pattern>, o segundo é
<input>, e o terceiro é <replacement>.
regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"
O exemplo acima produz -W-xxW-
regexReplaceAll causa panic se houver um problema e mustRegexReplaceAll
retorna um erro para o motor de templates se houver um problema.
regexReplaceAllLiteral, mustRegexReplaceAllLiteral
Retorna uma cópia da string de entrada, substituindo correspondências da Regexp
pela string de substituição. A string de substituição é substituída diretamente,
sem usar Expand. O primeiro argumento é <pattern>, o segundo é <input>, e o
terceiro é <replacement>.
regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"
O exemplo acima produz -${1}-${1}-
regexReplaceAllLiteral causa panic se houver um problema e
mustRegexReplaceAllLiteral retorna um erro para o motor de templates se houver
um problema.
regexSplit, mustRegexSplit
Divide a string de entrada em substrings separadas pela expressão e retorna uma
slice das substrings entre essas correspondências da expressão. O último
parâmetro n determina o número de substrings a retornar, onde -1 significa
retornar todas as correspondências
regexSplit "z+" "pizza" -1
O exemplo acima produz [pi a]
regexSplit causa panic se houver um problema e mustRegexSplit retorna um
erro para o motor de templates se houver um problema.
Funções Criptográficas e de Segurança
O Helm fornece algumas funções criptográficas avançadas. Elas incluem adler32sum, buildCustomCert, decryptAES, derivePassword, encryptAES, genCA, genPrivateKey, genSelfSignedCert, genSignedCert, htpasswd, randBytes, sha1sum e sha256sum.
sha1sum
A função sha1sum recebe uma string e calcula seu digest SHA1.
sha1sum "Hello world!"
sha256sum
A função sha256sum recebe uma string e calcula seu digest SHA256.
sha256sum "Hello world!"
O exemplo acima calculará a soma SHA 256 em um formato "ASCII armored" que é seguro para imprimir.
adler32sum
A função adler32sum recebe uma string e calcula seu checksum Adler-32.
adler32sum "Hello world!"
htpasswd
A função htpasswd recebe um username e password e gera um hash bcrypt da
senha. O resultado pode ser usado para autenticação básica em um Servidor HTTP
Apache.
htpasswd "myUser" "myPassword"
Note que é inseguro armazenar a senha diretamente no template.
randBytes
A função randBytes aceita um número N e gera uma sequência aleatória criptograficamente segura (usa crypto/rand) de N bytes. A sequência é retornada como uma string codificada em base64.
randBytes 24
derivePassword
A função derivePassword pode ser usada para derivar uma senha específica
baseada em algumas restrições de "senha mestre" compartilhadas. O algoritmo para
isso é bem
especificado.
derivePassword 1 "long" "password" "user" "example.com"
Note que é considerado inseguro armazenar as partes diretamente no template.
genPrivateKey
A função genPrivateKey gera uma nova chave privada codificada em um bloco PEM.
Ela aceita um dos seguintes valores para seu primeiro parâmetro:
ecdsa: Gera uma chave DSA de curva elíptica (P256)dsa: Gera uma chave DSA (L2048N256)rsa: Gera uma chave RSA 4096
buildCustomCert
A função buildCustomCert permite personalizar o certificado.
Ela recebe os seguintes parâmetros string:
- Um certificado em formato PEM codificado em base64
- Uma chave privada em formato PEM codificada em base64
Retorna um objeto de certificado com os seguintes atributos:
Cert: Um certificado codificado em PEMKey: Uma chave privada codificada em PEM
Exemplo:
$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"
Note que o objeto retornado pode ser passado para a função genSignedCert para
assinar um certificado usando esta CA.
genCA
A função genCA gera uma nova autoridade certificadora x509 autoassinada.
Ela recebe os seguintes parâmetros:
- Nome comum do sujeito (cn)
- Duração da validade do certificado em dias
Retorna um objeto com os seguintes atributos:
Cert: Um certificado codificado em PEMKey: Uma chave privada codificada em PEM
Exemplo:
$ca := genCA "foo-ca" 365
Note que o objeto retornado pode ser passado para a função genSignedCert para
assinar um certificado usando esta CA.
genSelfSignedCert
A função genSelfSignedCert gera um novo certificado x509 autoassinado.
Ela recebe os seguintes parâmetros:
- Nome comum do sujeito (cn)
- Lista opcional de IPs; pode ser nil
- Lista opcional de nomes DNS alternativos; pode ser nil
- Duração da validade do certificado em dias
Retorna um objeto com os seguintes atributos:
Cert: Um certificado codificado em PEMKey: Uma chave privada codificada em PEM
Exemplo:
$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365
genSignedCert
A função genSignedCert gera um novo certificado x509 assinado pela CA
especificada.
Ela recebe os seguintes parâmetros:
- Nome comum do sujeito (cn)
- Lista opcional de IPs; pode ser nil
- Lista opcional de nomes DNS alternativos; pode ser nil
- Duração da validade do certificado em dias
- CA (veja
genCA)
Exemplo:
$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
A função encryptAES criptografa texto com AES-256 CBC e retorna uma string
codificada em base64.
encryptAES "secretkey" "plaintext"
decryptAES
A função decryptAES recebe uma string base64 codificada pelo algoritmo AES-256
CBC e retorna o texto decodificado.
"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"
Funções de Data
O Helm inclui as seguintes funções de data que você pode usar em templates: ago, date, dateInZone, dateModify (mustDateModify), duration, durationRound, htmlDate, htmlDateInZone, now, toDate (mustToDate) e unixEpoch.
now
A data/hora atual. Use isso em conjunto com outras funções de data.
ago
A função ago retorna a duração desde o momento. Agora em resolução de segundos.
ago .CreatedAt
retorna no formato String() de time.Duration
2h34m7s
date
A função date formata uma data.
Formata a data para ANO-MÊS-DIA:
now | date "2006-01-02"
A formatação de datas em Go é um pouco diferente.
Em resumo, use isso como a data base:
Mon Jan 2 15:04:05 MST 2006
Escreva-a no formato que você deseja. Acima, 2006-01-02 é a mesma data, mas no
formato que queremos.
dateInZone
Igual a date, mas com um fuso horário.
dateInZone "2006-01-02" (now) "UTC"
duration
Formata uma quantidade de segundos como um time.Duration.
Isso retorna 1m35s
duration "95"
durationRound
Arredonda uma duração para a unidade mais significativa. Strings e
time.Duration são analisados como uma duração, enquanto um time.Time é
calculado como a duração desde então.
Isso retorna 2h
durationRound "2h10m5s"
Isso retorna 3mo
durationRound "2400h10m5s"
unixEpoch
Retorna os segundos desde a época unix para um time.Time.
now | unixEpoch
dateModify, mustDateModify
O dateModify recebe uma modificação e uma data e retorna o timestamp.
Subtrai uma hora e trinta minutos do horário atual:
now | dateModify "-1.5h"
Se o formato de modificação estiver errado, dateModify retornará a data sem
modificação. mustDateModify retornará um erro caso contrário.
htmlDate
A função htmlDate formata uma data para inserir em um campo de entrada de
seleção de data HTML.
now | htmlDate
htmlDateInZone
Igual a htmlDate, mas com um fuso horário.
htmlDateInZone (now) "UTC"
toDate, mustToDate
toDate converte uma string para uma data. O primeiro argumento é o layout da
data e o segundo é a string da data. Se a string não puder ser convertida,
retorna o valor zero. mustToDate retornará um erro caso a string não possa ser
convertida.
Isso é útil quando você quer converter uma data em string para outro formato (usando pipe). O exemplo abaixo converte "2017-12-31" para "31/12/2017".
toDate "2006-01-02" "2017-12-31" | date "02/01/2006"
Funções de Dicionário e Dict
O Helm fornece um tipo de armazenamento chave/valor chamado dict (abreviação
de "dictionary", como em Python). Um dict é um tipo não ordenado.
A chave de um dicionário deve ser uma string. No entanto, o valor pode ser
de qualquer tipo, incluindo outro dict ou list.
Diferente de lists, dicts não são imutáveis. As funções set e unset
modificarão o conteúdo de um dicionário.
O Helm fornece as seguintes funções para trabalhar com dicts: deepCopy (mustDeepCopy), dict, dig, get, hasKey, keys, merge (mustMerge), mergeOverwrite (mustMergeOverwrite), omit, pick, pluck, set, unset e values.
dict
Criar dicionários é feito chamando a função dict e passando uma lista de
pares.
O seguinte cria um dicionário com três itens:
$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"
get
Dado um map e uma chave, obtém o valor do map.
get $myDict "name1"
O exemplo acima retorna "value1"
Note que se a chave não for encontrada, esta operação simplesmente retornará
"". Nenhum erro será gerado.
set
Use set para adicionar um novo par chave/valor a um dicionário.
$_ := set $myDict "name4" "value4"
Note que set retorna o dicionário (um requisito das funções de template Go),
então você pode precisar capturar o valor como feito acima com a atribuição
$_.
unset
Dado um map e uma chave, remove a chave do map.
$_ := unset $myDict "name4"
Assim como set, isso retorna o dicionário.
Note que se a chave não for encontrada, esta operação simplesmente retornará. Nenhum erro será gerado.
hasKey
A função hasKey retorna true se o dict fornecido contiver a chave
especificada.
hasKey $myDict "name1"
Se a chave não for encontrada, retorna false.
pluck
A função pluck permite fornecer uma chave e múltiplos maps, e obter uma lista
de todas as correspondências:
pluck "name1" $myDict $myOtherDict
O exemplo acima retornará uma list contendo cada valor encontrado ([value1 otherValue1]).
Se a chave não for encontrada em um map, esse map não terá um item na lista (e
o comprimento da lista retornada será menor que o número de dicts na chamada de
pluck).
Se a chave for encontrada mas o valor estiver vazio, esse valor será inserido.
Um idioma comum em templates Helm é usar pluck... | first para obter a
primeira chave correspondente de uma coleção de dicionários.
dig
A função dig percorre um conjunto aninhado de dicts, selecionando chaves de
uma lista de valores. Ela retorna um valor padrão se alguma das chaves não for
encontrada no dict associado.
dig "user" "role" "humanName" "guest" $dict
Dado um dict estruturado como
{
user: {
role: {
humanName: "curator"
}
}
}
o exemplo acima retornaria "curator". Se o dict não tivesse nem um campo
user, o resultado seria "guest".
Dig pode ser muito útil em casos onde você gostaria de evitar cláusulas de
guarda, especialmente porque o and do pacote de templates Go não faz
curto-circuito. Por exemplo, and a.maybeNil a.maybeNil.iNeedThis sempre
avaliará a.maybeNil.iNeedThis, e causará panic se a não tiver um campo
maybeNil.)
dig aceita seu argumento dict por último para suportar pipelining. Por
exemplo:
merge a b c | dig "one" "two" "three" "<missing>"
merge, mustMerge
Mescla dois ou mais dicionários em um, dando precedência ao dicionário de destino:
Dado:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
resultará em:
newdict:
default: default
overwrite: me
key: true
$newdict := merge $dest $source1 $source2
Esta é uma operação de mesclagem profunda, mas não uma operação de cópia
profunda. Objetos aninhados que são mesclados são a mesma instância em ambos os
dicts. Se você quiser uma cópia profunda junto com a mesclagem, use a função
deepCopy junto com a mesclagem. Por exemplo,
deepCopy $source | merge $dest
mustMerge retornará um erro em caso de mesclagem malsucedida.
mergeOverwrite, mustMergeOverwrite
Mescla dois ou mais dicionários em um, dando precedência da direita para a esquerda, efetivamente sobrescrevendo valores no dicionário de destino:
Dado:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
resultará em:
newdict:
default: default
overwrite: overwritten
key: false
$newdict := mergeOverwrite $dest $source1 $source2
Esta é uma operação de mesclagem profunda, mas não uma operação de cópia
profunda. Objetos aninhados que são mesclados são a mesma instância em ambos os
dicts. Se você quiser uma cópia profunda junto com a mesclagem, use a função
deepCopy junto com a mesclagem. Por exemplo,
deepCopy $source | mergeOverwrite $dest
mustMergeOverwrite retornará um erro em caso de mesclagem malsucedida.
keys
A função keys retornará uma list de todas as chaves em um ou mais tipos
dict. Como um dicionário é não ordenado, as chaves não estarão em uma ordem
previsível. Elas podem ser ordenadas com sortAlpha.
keys $myDict | sortAlpha
Ao fornecer múltiplos dicionários, as chaves serão concatenadas. Use a função
uniq junto com sortAlpha para obter uma lista única e ordenada de chaves.
keys $myDict $myOtherDict | uniq | sortAlpha
pick
A função pick seleciona apenas as chaves especificadas de um dicionário,
criando um novo dict.
$new := pick $myDict "name1" "name2"
O exemplo acima retorna {name1: value1, name2: value2}
omit
A função omit é similar a pick, exceto que retorna um novo dict com todas
as chaves que não correspondem às chaves especificadas.
$new := omit $myDict "name1" "name3"
O exemplo acima retorna {name2: value2}
values
A função values é similar a keys, exceto que retorna uma nova list com
todos os valores do dict de origem (apenas um dicionário é suportado).
$vals := values $myDict
O exemplo acima retorna list["value1", "value2", "value 3"]. Note que a função
values não dá garantias sobre a ordenação do resultado; se você se importa com
isso, use sortAlpha.
deepCopy, mustDeepCopy
As funções deepCopy e mustDeepCopy recebem um valor e fazem uma cópia
profunda dele. Isso inclui dicts e outras estruturas. deepCopy causa panic
quando há um problema, enquanto mustDeepCopy retorna um erro para o sistema de
templates quando há um erro.
dict "a" 1 "b" 2 | deepCopy
Uma Nota sobre Internos de Dict
Um dict é implementado em Go como um map[string]interface{}. Desenvolvedores
Go podem passar valores map[string]interface{} para o contexto para
disponibilizá-los para templates como dicts.
Funções de Codificação
O Helm tem as seguintes funções de codificação e decodificação:
b64enc/b64dec: Codifica ou decodifica com Base64b32enc/b32dec: Codifica ou decodifica com Base32
Funções de Lista e List
O Helm fornece um tipo simples list que pode conter listas sequenciais
arbitrárias de dados. Isso é similar a arrays ou slices, mas listas são
projetadas para serem usadas como tipos de dados imutáveis.
Crie uma lista de inteiros:
$myList := list 1 2 3 4 5
O exemplo acima cria uma lista [1 2 3 4 5].
O Helm fornece as seguintes funções 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 e without (mustWithout).
first, mustFirst
Para obter o primeiro item de uma lista, use first.
first $myList retorna 1
first causa panic se houver um problema, enquanto mustFirst retorna um erro
para o motor de templates se houver um problema.
rest, mustRest
Para obter a cauda da lista (tudo exceto o primeiro item), use rest.
rest $myList retorna [2 3 4 5]
rest causa panic se houver um problema, enquanto mustRest retorna um erro
para o motor de templates se houver um problema.
last, mustLast
Para obter o último item de uma lista, use last:
last $myList retorna 5. Isso é aproximadamente análogo a inverter uma lista
e então chamar first.
initial, mustInitial
Isso complementa last retornando todos os elementos exceto o último.
initial $myList retorna [1 2 3 4].
initial causa panic se houver um problema, enquanto mustInitial retorna um
erro para o motor de templates se houver um problema.
append, mustAppend
Adiciona um novo item a uma lista existente, criando uma nova lista.
$new = append $myList 6
O exemplo acima definiria $new como [1 2 3 4 5 6]. $myList permaneceria
inalterada.
append causa panic se houver um problema, enquanto mustAppend retorna um
erro para o motor de templates se houver um problema.
prepend, mustPrepend
Adiciona um elemento no início de uma lista, criando uma nova lista.
prepend $myList 0
O exemplo acima produziria [0 1 2 3 4 5]. $myList permaneceria inalterada.
prepend causa panic se houver um problema, enquanto mustPrepend retorna um
erro para o motor de templates se houver um problema.
concat
Concatena um número arbitrário de listas em uma.
concat $myList ( list 6 7 ) ( list 8 )
O exemplo acima produziria [1 2 3 4 5 6 7 8]. $myList permaneceria
inalterada.
reverse, mustReverse
Produz uma nova lista com os elementos invertidos da lista fornecida.
reverse $myList
O exemplo acima geraria a lista [5 4 3 2 1].
reverse causa panic se houver um problema, enquanto mustReverse retorna um
erro para o motor de templates se houver um problema.
uniq, mustUniq
Gera uma lista com todas as duplicatas removidas.
list 1 1 1 2 | uniq
O exemplo acima produziria [1 2]
uniq causa panic se houver um problema, enquanto mustUniq retorna um erro
para o motor de templates se houver um problema.
without, mustWithout
A função without filtra itens de uma lista.
without $myList 3
O exemplo acima produziria [1 2 4 5]
without pode receber mais de um filtro:
without $myList 1 3 5
Isso produziria [2 4]
without causa panic se houver um problema, enquanto mustWithout retorna um
erro para o motor de templates se houver um problema.
has, mustHas
Testa se uma lista contém um determinado elemento.
has 4 $myList
O exemplo acima retornaria true, enquanto has "hello" $myList retornaria
false.
has causa panic se houver um problema, enquanto mustHas retorna um erro para
o motor de templates se houver um problema.
compact, mustCompact
Aceita uma lista e remove entradas com valores vazios.
$list := list 1 "a" "foo" ""
$copy := compact $list
compact retornará uma nova lista com o item vazio (ou seja, "") removido.
compact causa panic se houver um problema e mustCompact retorna um erro para
o motor de templates se houver um problema.
index
Para obter o n-ésimo elemento de uma lista, use index list [n]. Para indexar
em listas multidimensionais, use index list [n] [m] ...
index $myList 0retorna1. É o mesmo quemyList[0]index $myList 0 1seria o mesmo quemyList[0][1]
slice, mustSlice
Para obter elementos parciais de uma lista, use slice list [n] [m]. É
equivalente a list[n:m].
slice $myListretorna[1 2 3 4 5]. É o mesmo quemyList[:].slice $myList 3retorna[4 5]. É o mesmo quemyList[3:].slice $myList 1 3retorna[2 3]. É o mesmo quemyList[1:3].slice $myList 0 3retorna[1 2 3]. É o mesmo quemyList[:3].
slice causa panic se houver um problema, enquanto mustSlice retorna um erro
para o motor de templates se houver um problema.
until
A função until constrói um intervalo de inteiros.
until 5
O exemplo acima gera a lista [0, 1, 2, 3, 4].
Isso é útil para fazer loop com range $i, $e := until 5.
untilStep
Como until, untilStep gera uma lista de inteiros contados. Mas permite
definir um início, fim e passo:
untilStep 3 6 2
O exemplo acima produzirá [3 5] começando com 3 e adicionando 2 até que seja
igual ou maior que 6. Isso é similar à função range do Python.
seq
Funciona como o comando seq do bash.
- 1 parâmetro (end) - gerará todos os inteiros contados entre 1 e
endinclusive. - 2 parâmetros (start, end) - gerará todos os inteiros contados entre
starteendinclusive, incrementando ou decrementando por 1. - 3 parâmetros (start, step, end) - gerará todos os inteiros contados entre
starteendinclusive, incrementando ou decrementando porstep.
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 uma lista em pedaços de tamanho especificado, use chunk size list. Isso é útil para paginação.
chunk 3 (list 1 2 3 4 5 6 7 8)
Isso produz uma lista de listas [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ].
Funções Matemáticas
Todas as funções matemáticas operam em valores int64, a menos que especificado
de outra forma.
As seguintes funções matemáticas estão disponíveis: add, add1, ceil, div, floor, len, max, min, mod, mul, round e sub.
add
Soma números com add. Aceita duas ou mais entradas.
add 1 2 3
add1
Para incrementar por 1, use add1.
sub
Para subtrair, use sub.
div
Realiza divisão inteira com div.
mod
Módulo com mod.
mul
Multiplica com mul. Aceita duas ou mais entradas.
mul 1 2 3
max
Retorna o maior de uma série de inteiros.
Isso retornará 3:
max 1 2 3
min
Retorna o menor de uma série de inteiros.
min 1 2 3 retornará 1.
len
Retorna o comprimento do argumento como um inteiro.
len .Arg
Funções Matemáticas com Float
Todas as funções matemáticas operam em valores float64.
addf
Soma números com addf
Isso retornará 5.5:
addf 1.5 2 2
add1f
Para incrementar por 1, use add1f
subf
Para subtrair, use subf
Isso é equivalente a 7.5 - 2 - 3 e retornará 2.5:
subf 7.5 2 3
divf
Realiza divisão inteira com divf
Isso é equivalente a 10 / 2 / 4 e retornará 1.25:
divf 10 2 4
mulf
Multiplica com mulf
Isso retornará 6:
mulf 1.5 2 2
maxf
Retorna o maior de uma série de floats:
Isso retornará 3:
maxf 1 2.5 3
minf
Retorna o menor de uma série de floats.
Isso retornará 1.5:
minf 1.5 2 3
floor
Retorna o maior valor float menor ou igual ao valor de entrada.
floor 123.9999 retornará 123.0.
ceil
Retorna o maior valor float maior ou igual ao valor de entrada.
ceil 123.001 retornará 124.0.
round
Retorna um valor float com o resto arredondado para o número de dígitos especificado após o ponto decimal.
round 123.555555 3 retornará 123.556.
Funções de Rede
O Helm tem uma única função de rede, getHostByName.
O getHostByName recebe um nome de domínio e retorna o endereço IP.
getHostByName "www.google.com" retornaria o endereço IP correspondente de
www.google.com.
Esta função requer que a opção --enable-dns seja passada na linha de comando
do helm.
Funções de Caminho de Arquivo
Embora as funções de template do Helm não concedam acesso ao sistema de arquivos, elas fornecem funções para trabalhar com strings que seguem convenções de caminhos de arquivo. Essas incluem base, clean, dir, ext e isAbs.
base
Retorna o último elemento de um caminho.
base "foo/bar/baz"
O exemplo acima imprime "baz".
dir
Retorna o diretório, removendo a última parte do caminho. Então dir "foo/bar/baz" retorna foo/bar.
clean
Limpa um caminho.
clean "foo/bar/../baz"
O exemplo acima resolve o .. e retorna foo/baz.
ext
Retorna a extensão do arquivo.
ext "foo.bar"
O exemplo acima retorna .bar.
isAbs
Para verificar se um caminho de arquivo é absoluto, use isAbs.
Funções de Reflexão
O Helm fornece ferramentas rudimentares de reflexão. Estas ajudam desenvolvedores de templates avançados a entender as informações de tipo Go subjacentes para um determinado valor. O Helm é escrito em Go e é fortemente tipado. O sistema de tipos se aplica dentro de templates.
Go tem vários kinds primitivos, como string, slice, int64 e bool.
Go tem um sistema de tipos aberto que permite desenvolvedores criar seus próprios tipos.
O Helm fornece um conjunto de funções para cada através de funções kind e funções type. Uma função deepEqual também é fornecida para comparar dois valores.
Funções Kind
Existem duas funções Kind: kindOf retorna o kind de um objeto.
kindOf "hello"
O exemplo acima retornaria string. Para testes simples (como em blocos if),
a função kindIs permitirá verificar se um valor é de um kind específico:
kindIs "int" 123
O exemplo acima retornará true.
Funções Type
Tipos são um pouco mais difíceis de trabalhar, então existem três funções diferentes:
typeOfretorna o tipo subjacente de um valor:typeOf $footypeIsé comokindIs, mas para tipos:typeIs "*io.Buffer" $myValtypeIsLikefunciona comotypeIs, exceto que também desreferencia ponteiros
Nota: Nenhuma dessas pode testar se algo implementa uma determinada interface, pois fazer isso exigiria compilar a interface antecipadamente.
deepEqual
deepEqual retorna true se dois valores são "profundamente
iguais"
Funciona para tipos não primitivos também (comparado ao eq embutido).
deepEqual (list 1 2 3) (list 1 2 3)
O exemplo acima retornará true.
Funções de Versão Semântica
Alguns esquemas de versão são facilmente analisáveis e comparáveis. O Helm fornece funções para trabalhar com versões SemVer 2. Essas incluem semver e semverCompare. Abaixo você também encontrará detalhes sobre o uso de intervalos para comparações.
semver
A função semver analisa uma string em uma Versão Semântica:
$version := semver "1.2.3-alpha.1+123"
Se o analisador falhar, causará a interrupção da execução do template com um erro.
Neste ponto, $version é um ponteiro para um objeto Version com as seguintes
propriedades:
$version.Major: O número major (1acima)$version.Minor: O número minor (2acima)$version.Patch: O número patch (3acima)$version.Prerelease: O prerelease (alpha.1acima)$version.Metadata: Os metadados de build (123acima)$version.Original: A versão original como string
Adicionalmente, você pode comparar uma Version com outra version usando a
função Compare:
semver "1.4.3" | (semver "1.2.3").Compare
O exemplo acima retornará -1.
Os valores de retorno são:
-1se a semver fornecida for maior que a semver cujo métodoComparefoi chamado1se a versão cujo funçãoComparefoi chamada for maior.0se forem a mesma versão
(Note que em SemVer, o campo Metadata não é comparado durante operações de
comparação de versão.)
semverCompare
Uma função de comparação mais robusta é fornecida como semverCompare. Esta
versão suporta intervalos de versão:
semverCompare "1.2.3" "1.2.3"verifica uma correspondência exatasemverCompare "~1.2.0" "1.2.3"verifica se as versões major e minor correspondem, e que o número patch do segundo parâmetro é maior ou igual ao primeiro parâmetro.
As funções SemVer usam a biblioteca semver Masterminds, dos criadores do Sprig.
Comparações Básicas
Existem dois elementos nas comparações. Primeiro, uma string de comparação é uma
lista de comparações AND separadas por espaço ou vírgula. Estas são então
separadas por || (comparações OR). Por exemplo, ">= 1.2 < 3.0.0 || >= 4.2.3"
está procurando uma comparação que seja maior ou igual a 1.2 e menor que 3.0.0
ou que seja maior ou igual a 4.2.3.
As comparações básicas são:
=: igual (alias para nenhum operador)!=: diferente>: maior que<: menor que>=: maior ou igual a<=: menor ou igual a
Trabalhando com Versões Prerelease
Prereleases, para quem não está familiarizado com elas, são usadas para
lançamentos de software antes de lançamentos estáveis ou geralmente disponíveis.
Exemplos de prereleases incluem lançamentos de desenvolvimento, alpha, beta e
release candidate. Uma prerelease pode ser uma versão como 1.2.3-beta.1,
enquanto o lançamento estável seria 1.2.3. Na ordem de precedência,
prereleases vêm antes de seus lançamentos associados. Neste exemplo
1.2.3-beta.1 < 1.2.3.
De acordo com a especificação de Versão Semântica, prereleases podem não ser compatíveis com a API de sua contraparte de lançamento. Ela diz,
Uma versão prerelease indica que a versão é instável e pode não satisfazer os requisitos de compatibilidade pretendidos, conforme indicado por sua versão normal associada.
Comparações SemVer usando restrições sem um comparador de prerelease irão pular
versões prerelease. Por exemplo, >=1.2.3 pulará prereleases ao olhar uma lista
de lançamentos, enquanto >=1.2.3-0 avaliará e encontrará prereleases.
A razão para o 0 como uma versão prerelease no exemplo de comparação é porque
prereleases podem conter apenas alfanuméricos ASCII e hífens (junto com
separadores .), conforme a especificação. A ordenação acontece em ordem de
classificação ASCII, novamente conforme a especificação. O caractere mais baixo
é um 0 na ordem de classificação ASCII (veja uma Tabela
ASCII)
Entender a ordenação de classificação ASCII é importante porque A-Z vem antes de
a-z. Isso significa que >=1.2.3-BETA retornará 1.2.3-alpha. O que você pode
esperar da sensibilidade a maiúsculas/minúsculas não se aplica aqui. Isso se
deve à ordenação de classificação ASCII, que é o que a especificação determina.
Comparações de Intervalo com Hífen
Existem múltiplos métodos para lidar com intervalos e o primeiro são intervalos com hífen. Eles se parecem com:
1.2 - 1.4.5que é equivalente a>= 1.2 <= 1.4.52.3.4 - 4.5que é equivalente a>= 2.3.4 <= 4.5
Curingas em Comparações
Os caracteres x, X e * podem ser usados como caractere curinga. Isso
funciona para todos os operadores de comparação. Quando usado no operador =,
ele volta para a comparação de nível patch (veja til abaixo). Por exemplo,
1.2.xé equivalente a>= 1.2.0, < 1.3.0>= 1.2.xé equivalente a>= 1.2.0<= 2.xé equivalente a< 3*é equivalente a>= 0.0.0
Comparações de Intervalo Til (Patch)
O operador de comparação til (~) é para intervalos de nível patch quando uma
versão minor é especificada e mudanças de nível major quando o número minor está
faltando. Por exemplo,
~1.2.3é equivalente a>= 1.2.3, < 1.3.0~1é equivalente a>= 1, < 2~2.3é equivalente a>= 2.3, < 2.4~1.2.xé equivalente a>= 1.2.0, < 1.3.0~1.xé equivalente a>= 1, < 2
Comparações de Intervalo Circunflexo (Major)
O operador de comparação circunflexo (^) é para mudanças de nível major uma
vez que um lançamento estável (1.0.0) tenha ocorrido. Antes de um lançamento
1.0.0, as versões minor funcionam como o nível de estabilidade da API. Isso é
útil ao comparar versões de API, pois uma mudança major quebra a API. Por
exemplo,
^1.2.3é equivalente a>= 1.2.3, < 2.0.0^1.2.xé equivalente a>= 1.2.0, < 2.0.0^2.3é equivalente a>= 2.3, < 3^2.xé equivalente a>= 2.0.0, < 3^0.2.3é equivalente a>=0.2.3 <0.3.0^0.2é equivalente a>=0.2.0 <0.3.0^0.0.3é equivalente a>=0.0.3 <0.0.4^0.0é equivalente a>=0.0.0 <0.1.0^0é equivalente a>=0.0.0 <1.0.0
Funções de URL
O Helm inclui as funções urlParse, urlJoin e urlquery permitindo que você trabalhe com partes de URL.
urlParse
Analisa uma string para URL e produz um dict com as partes da URL
urlParse "http://admin:secret@server.com:8080/api?list=false#anchor"
O exemplo acima retorna um dict, contendo o objeto URL:
scheme: 'http'
host: 'server.com:8080'
path: '/api'
query: 'list=false'
opaque: nil
fragment: 'anchor'
userinfo: 'admin:secret'
Isso é implementado usando os pacotes URL da biblioteca padrão Go. Para mais informações, consulte https://golang.org/pkg/net/url/#URL
urlJoin
Une um map (produzido por urlParse) para produzir uma string URL
urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http")
O exemplo acima retorna a seguinte string:
http://host:80/path?query#fragment
urlquery
Retorna a versão escapada do valor passado como argumento para que seja adequado para incorporação na parte de query de uma URL.
$var := urlquery "string for query"
Funções de UUID
O Helm pode gerar UUIDs v4 universalmente únicos.
uuidv4
O exemplo acima retorna um novo UUID do tipo v4 (gerado aleatoriamente).
Funções de Kubernetes e Chart
O Helm inclui funções para trabalhar com Kubernetes, incluindo .Capabilities.APIVersions.Has, Files e lookup.
lookup
lookup é usado para consultar recursos em um cluster em execução. Quando usado
com o comando helm template, sempre retorna uma resposta vazia.
Você pode encontrar mais detalhes na documentação sobre a função lookup.
.Capabilities.APIVersions.Has
Retorna se uma versão da API ou recurso está disponível em um cluster.
.Capabilities.APIVersions.Has "apps/v1"
.Capabilities.APIVersions.Has "apps/v1/Deployment"
Mais informações estão disponíveis na documentação de objetos embutidos.
Funções de Arquivo
Existem várias funções que permitem acessar arquivos não especiais dentro de um chart. Por exemplo, para acessar arquivos de configuração de aplicação. Estas estão documentadas em Acessando Arquivos Dentro de Templates.
Nota: a documentação para muitas dessas funções vem do Sprig. Sprig é uma biblioteca de funções de template disponível para aplicações Go.