Liste der Template-Funktionen
Helm enthält viele Template-Funktionen, die Sie in Templates nutzen können. Sie sind hier aufgelistet und in folgende Kategorien unterteilt:
- Kryptografie und Sicherheit
- Datum
- Dictionaries
- Encoding
- Dateipfade
- Kubernetes und Chart
- Logik und Ablaufsteuerung
- Listen
- Mathematik
- Float-Mathematik
- Netzwerk
- Reflection
- Reguläre Ausdrücke
- Semantische Versionen
- Strings
- Typkonvertierung
- URL
- UUID
Logik- und Ablaufsteuerungsfunktionen
Helm enthält zahlreiche Logik- und Ablaufsteuerungsfunktionen, darunter and, coalesce, default, empty, eq, fail, ge, gt, le, lt, ne, not, or und required.
and
Gibt das boolesche AND von zwei oder mehr Argumenten zurück (das erste leere Argument oder das letzte Argument).
and .Arg1 .Arg2
or
Gibt das boolesche OR von zwei oder mehr Argumenten zurück (das erste nicht-leere Argument oder das letzte Argument).
or .Arg1 .Arg2
not
Gibt die boolesche Negation des Arguments zurück.
not .Arg
eq
Gibt die boolesche Gleichheit der Argumente zurück (z.B. Arg1 == Arg2).
eq .Arg1 .Arg2
ne
Gibt die boolesche Ungleichheit der Argumente zurück (z.B. Arg1 != Arg2).
ne .Arg1 .Arg2
lt
Gibt true zurück, wenn das erste Argument kleiner als das zweite ist.
Andernfalls wird false zurückgegeben (z.B. Arg1 < Arg2).
lt .Arg1 .Arg2
le
Gibt true zurück, wenn das erste Argument kleiner oder gleich dem zweiten ist.
Andernfalls wird false zurückgegeben (z.B. Arg1 <= Arg2).
le .Arg1 .Arg2
gt
Gibt true zurück, wenn das erste Argument größer als das zweite ist.
Andernfalls wird false zurückgegeben (z.B. Arg1 > Arg2).
gt .Arg1 .Arg2
ge
Gibt true zurück, wenn das erste Argument größer oder gleich dem zweiten ist.
Andernfalls wird false zurückgegeben (z.B. Arg1 >= Arg2).
ge .Arg1 .Arg2
default
Um einen einfachen Standardwert zu setzen, verwenden Sie default:
default "foo" .Bar
Wenn .Bar einen nicht-leeren Wert ergibt, wird dieser verwendet. Ist er
jedoch leer, wird stattdessen foo zurückgegeben.
Die Definition von "leer" hängt vom Typ ab:
- Numerisch: 0
- String: ""
- Listen:
[] - Dicts:
{} - Boolean:
false - Und immer
nil(auch bekannt als null)
Für Structs gibt es keine Definition von leer, daher gibt ein Struct niemals den Standardwert zurück.
required
Geben Sie Werte an, die mit required gesetzt werden müssen:
required "A valid foo is required!" .Bar
Wenn .Bar leer oder nicht definiert ist (siehe default für die
Auswertung), wird das Template nicht gerendert und stattdessen die angegebene
Fehlermeldung zurückgegeben.
empty
Die Funktion empty gibt true zurück, wenn der angegebene Wert als leer
gilt, andernfalls false. Die leeren Werte sind im Abschnitt default
aufgelistet.
empty .Foo
Beachten Sie, dass in Go-Template-Bedingungen die Leerheit automatisch
berechnet wird. Daher benötigen Sie selten if not empty .Foo. Verwenden Sie
stattdessen einfach if .Foo.
fail
Gibt bedingungslos einen leeren string und einen error mit dem angegebenen
Text zurück. Dies ist nützlich in Szenarien, in denen andere Bedingungen
festgestellt haben, dass das Template-Rendering fehlschlagen sollte.
fail "Please accept the end user license agreement"
coalesce
Die Funktion coalesce nimmt eine Liste von Werten und gibt den ersten
nicht-leeren zurück.
coalesce 0 1 2
Das obige gibt 1 zurück.
Diese Funktion ist nützlich, um mehrere Variablen oder Werte zu durchsuchen:
coalesce .name .parent.name "Matt"
Das obige prüft zunächst, ob .name leer ist. Falls nicht, wird dieser Wert
zurückgegeben. Falls er leer ist, wertet coalesce .parent.name auf
Leerheit aus. Wenn schließlich sowohl .name als auch .parent.name leer
sind, wird Matt zurückgegeben.
ternary
Die Funktion ternary nimmt zwei Werte und einen Testwert. Wenn der Testwert
true ist, wird der erste Wert zurückgegeben. Wenn der Testwert leer ist, wird
der zweite Wert zurückgegeben. Dies ähnelt dem ternären Operator in C und
anderen Programmiersprachen.
true-Testwert
ternary "foo" "bar" true
oder
true | ternary "foo" "bar"
Das obige gibt "foo" zurück.
false-Testwert
ternary "foo" "bar" false
oder
false | ternary "foo" "bar"
Das obige gibt "bar" zurück.
String-Funktionen
Helm enthält die folgenden String-Funktionen: 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 und wrapWith.
print
Gibt einen String aus der Kombination seiner Teile zurück.
print "Matt has " .Dogs " dogs"
Typen, die keine Strings sind, werden nach Möglichkeit in Strings konvertiert.
Beachten Sie, dass zwischen zwei nebeneinanderstehenden Argumenten, die keine Strings sind, ein Leerzeichen eingefügt wird.
println
Funktioniert wie print, fügt aber am Ende eine neue Zeile hinzu.
printf
Gibt einen String basierend auf einem Formatierungsstring und den übergebenen Argumenten zurück.
printf "%s has %d dogs." .Name .NumberDogs
Der zu verwendende Platzhalter hängt vom Typ des übergebenen Arguments ab. Dies umfasst:
Allgemein:
%vder Wert im Standardformat- beim Drucken von Dicts fügt das Plus-Flag (%+v) Feldnamen hinzu
%%ein literales Prozentzeichen; verbraucht keinen Wert
Boolean:
%tdas Wort true oder false
Integer:
%bBasis 2%cdas Zeichen, das durch den entsprechenden Unicode-Codepunkt dargestellt wird%dBasis 10%oBasis 8%OBasis 8 mit 0o-Präfix%qein einzeln zitiertes Zeichenliteral, sicher escaped%xBasis 16, mit Kleinbuchstaben für a-f%XBasis 16, mit Großbuchstaben für A-F%UUnicode-Format: U+1234; entspricht "U+%04X"
Fließkomma- und komplexe Bestandteile:
%bdezimale wissenschaftliche Notation mit Exponent als Zweierpotenz, z.B. -123456p-78%ewissenschaftliche Notation, z.B. -1.234456e+78%Ewissenschaftliche Notation, z.B. -1.234456E+78%fDezimalpunkt ohne Exponent, z.B. 123.456%FSynonym für %f%g%e für große Exponenten, sonst %f%G%E für große Exponenten, sonst %F%xhexadezimale Notation (mit dezimaler Zweierpotenz als Exponent), z.B. -0x1.23abcp+20%Xhexadezimale Notation in Großbuchstaben, z.B. -0X1.23ABCP+20
String und Byte-Slice (werden gleichwertig behandelt mit diesen Verben):
%sdie nicht interpretierten Bytes des Strings oder Slice%qein doppelt zitierter String, sicher escaped%xBasis 16, Kleinbuchstaben, zwei Zeichen pro Byte%XBasis 16, Großbuchstaben, zwei Zeichen pro Byte
Slice:
%pAdresse des 0. Elements in Basis-16-Notation mit führendem 0x
trim
Die Funktion trim entfernt Leerzeichen von beiden Seiten eines Strings:
trim " hello "
Das obige erzeugt hello
trimAll
Entfernt die angegebenen Zeichen vorne und hinten aus einem String:
trimAll "$" "$5.00"
Das obige gibt 5.00 zurück (als String).
trimPrefix
Entfernt nur das Präfix aus einem String:
trimPrefix "-" "-hello"
Das obige gibt hello zurück
trimSuffix
Entfernt nur das Suffix aus einem String:
trimSuffix "-" "hello-"
Das obige gibt hello zurück
lower
Konvertiert den gesamten String in Kleinbuchstaben:
lower "HELLO"
Das obige gibt hello zurück
upper
Konvertiert den gesamten String in Großbuchstaben:
upper "hello"
Das obige gibt HELLO zurück
title
Konvertiert in Titel-Schreibweise:
title "hello world"
Das obige gibt Hello World zurück
untitle
Entfernt die Titel-Schreibweise. untitle "Hello World" erzeugt hello world.
repeat
Wiederholt einen String mehrfach:
repeat 3 "hello"
Das obige gibt hellohellohello zurück
substr
Holt einen Teilstring aus einem String. Es werden drei Parameter benötigt:
- start (int)
- end (int)
- string (string)
substr 0 5 "hello world"
Das obige gibt hello zurück
nospace
Entfernt alle Leerzeichen aus einem String.
nospace "hello w o r l d"
Das obige gibt helloworld zurück
trunc
Kürzt einen String
trunc 5 "hello world"
Das obige erzeugt hello.
trunc -5 "hello world"
Das obige erzeugt world.
abbrev
Kürzt einen String mit Auslassungspunkten (...)
Parameter:
- maximale Länge
- der String
abbrev 5 "hello world"
Das obige gibt he... zurück, da die Breite der Auslassungspunkte gegen die
maximale Länge gerechnet wird.
abbrevboth
Kürzt auf beiden Seiten:
abbrevboth 5 10 "1234 5678 9123"
Das obige erzeugt ...5678...
Es werden benötigt:
- linker Offset
- maximale Länge
- der String
initials
Nimmt bei mehreren Wörtern den ersten Buchstaben jedes Wortes und kombiniert sie.
initials "First Try"
Das obige gibt FT zurück
randAlphaNum, randAlpha, randNumeric und randAscii
Diese vier Funktionen generieren kryptografisch sichere (verwendet
crypto/rand) zufällige Strings, aber mit unterschiedlichen
Basis-Zeichensätzen:
randAlphaNumverwendet0-9a-zA-ZrandAlphaverwendeta-zA-ZrandNumericverwendet0-9randAsciiverwendet alle druckbaren ASCII-Zeichen
Jede nimmt einen Parameter: die ganzzahlige Länge des Strings.
randNumeric 3
Das obige erzeugt einen zufälligen String mit drei Ziffern.
wrap
Umbricht Text bei einer angegebenen Spaltenanzahl:
wrap 80 $someText
Das obige umbricht den String in $someText bei 80 Spalten.
wrapWith
wrapWith funktioniert wie wrap, aber erlaubt die Angabe des
Umbruch-Strings. (wrap verwendet \n)
wrapWith 5 "\t" "Hello World"
Das obige erzeugt Hello World (wobei das Leerzeichen ein ASCII-Tabulatorzeichen ist)
contains
Prüft, ob ein String in einem anderen enthalten ist:
contains "cat" "catch"
Das obige gibt true zurück, weil catch das Wort cat enthält.
hasPrefix und hasSuffix
Die Funktionen hasPrefix und hasSuffix prüfen, ob ein String ein bestimmtes
Präfix oder Suffix hat:
hasPrefix "cat" "catch"
Das obige gibt true zurück, weil catch das Präfix cat hat.
quote und squote
Diese Funktionen umschließen einen String mit doppelten Anführungszeichen
(quote) oder einfachen Anführungszeichen (squote).
cat
Die Funktion cat verkettet mehrere Strings zu einem und trennt sie durch
Leerzeichen:
cat "hello" "beautiful" "world"
Das obige erzeugt hello beautiful world
indent
Die Funktion indent rückt jede Zeile in einem gegebenen String um die
angegebene Einrückungsbreite ein. Dies ist nützlich beim Ausrichten von
mehrzeiligen Strings:
indent 4 $lots_of_text
Das obige rückt jede Textzeile um 4 Leerzeichen ein.
nindent
Die Funktion nindent ist identisch mit der Funktion indent, stellt aber eine
neue Zeile an den Anfang des Strings.
nindent 4 $lots_of_text
Das obige rückt jede Textzeile um 4 Leerzeichen ein und fügt am Anfang eine neue Zeile hinzu.
replace
Führt eine einfache String-Ersetzung durch.
Es werden drei Argumente benötigt:
- zu ersetzender String
- Ersetzungs-String
- Quell-String
"I Am Henry VIII" | replace " " "-"
Das obige erzeugt I-Am-Henry-VIII
plural
Pluralisiert einen String.
len $fish | plural "one anchovy" "many anchovies"
Wenn die Länge des Strings 1 ist, wird das erste Argument ausgegeben (one anchovy). Andernfalls wird das zweite Argument ausgegeben (many anchovies).
Die Argumente sind:
- Singular-String
- Plural-String
- Länge als Integer
HINWEIS: Helm unterstützt derzeit keine Sprachen mit komplexeren
Pluralbildungsregeln. Und 0 wird als Plural betrachtet, weil die englische
Sprache es so behandelt (zero anchovies).
snakecase
Konvertiert einen String von camelCase in snake_case.
snakecase "FirstName"
Das obige erzeugt first_name.
camelcase
Konvertiert einen String von snake_case in CamelCase.
camelcase "http_server"
Das obige erzeugt HttpServer.
kebabcase
Konvertiert einen String von camelCase in kebab-case.
kebabcase "FirstName"
Das obige erzeugt first-name.
swapcase
Tauscht die Groß-/Kleinschreibung eines Strings mit einem wortbasierten Algorithmus.
Konvertierungsalgorithmus:
- Großbuchstabe wird zu Kleinbuchstabe
- Titelbuchstabe wird zu Kleinbuchstabe
- Kleinbuchstabe nach Leerzeichen oder am Anfang wird zu Titelbuchstabe
- Andere Kleinbuchstaben werden zu Großbuchstaben
- Leerzeichen wird durch unicode.IsSpace(char) definiert
swapcase "This Is A.Test"
Das obige erzeugt tHIS iS a.tEST.
shuffle
Mischt einen String.
shuffle "hello"
Das obige randomisiert die Buchstaben in hello und erzeugt möglicherweise
oelhl.
Typkonvertierungsfunktionen
Die folgenden Typkonvertierungsfunktionen werden von Helm bereitgestellt:
atoi: Konvertiert einen String in einen Integer.float64: Konvertiert in einenfloat64.int: Konvertiert in einenintmit der Systembreite.int64: Konvertiert in einenint64.toDecimal: Konvertiert eine Unix-Oktalzahl in einenint64.toString: Konvertiert in einen String.toStrings: Konvertiert eine Liste, Slice oder Array in eine Liste von Strings.toJson(mustToJson): Konvertiert Liste, Slice, Array, Dict oder Objekt in JSON.toPrettyJson(mustToPrettyJson): Konvertiert Liste, Slice, Array, Dict oder Objekt in eingerücktes JSON.toRawJson(mustToRawJson): Konvertiert Liste, Slice, Array, Dict oder Objekt in JSON mit nicht-escaped HTML-Zeichen.fromYaml: Konvertiert einen YAML-String in ein Objekt.fromJson: Konvertiert einen JSON-String in ein Objekt.fromJsonArray: Konvertiert ein JSON-Array in eine Liste.toYaml: Konvertiert Liste, Slice, Array, Dict oder Objekt in eingerücktes YAML. Diese Funktion entspricht der GoLang yaml.Marshal-Funktion, siehe Dokumentation: https://pkg.go.dev/gopkg.in/yaml.v2#MarshaltoYamlPretty: Konvertiert Liste, Slice, Array, Dict oder Objekt in eingerücktes YAML. EntsprichttoYaml, rückt aber Listen zusätzlich um 2 Leerzeichen ein.toToml: Konvertiert Liste, Slice, Array, Dict oder Objekt in TOML.fromYamlArray: Konvertiert ein YAML-Array in eine Liste.
Nur atoi erfordert, dass die Eingabe einen bestimmten Typ hat. Die anderen
versuchen, von jedem Typ in den Zieltyp zu konvertieren. Zum Beispiel kann
int64 Floats in Ints und auch Strings in Ints konvertieren.
toStrings
Erzeugt bei einer listenähnlichen Sammlung eine Liste von Strings.
list 1 2 3 | toStrings
Das obige konvertiert 1 in "1", 2 in "2" usw. und gibt sie dann als
Liste zurück.
toDecimal
Erzeugt aus einer Unix-Oktal-Berechtigung eine Dezimalzahl.
"0777" | toDecimal
Das obige konvertiert 0777 in 511 und gibt den Wert als int64 zurück.
toJson, mustToJson
Die Funktion toJson kodiert ein Element in einen JSON-String. Wenn das
Element nicht in JSON konvertiert werden kann, gibt die Funktion einen leeren
String zurück. mustToJson gibt einen Fehler zurück, falls das Element nicht
in JSON kodiert werden kann.
toJson .Item
Das obige gibt die JSON-String-Darstellung von .Item zurück.
toPrettyJson, mustToPrettyJson
Die Funktion toPrettyJson kodiert ein Element in einen formatierten
(eingerückten) JSON-String.
toPrettyJson .Item
Das obige gibt die eingerückte JSON-String-Darstellung von .Item zurück.
toRawJson, mustToRawJson
Die Funktion toRawJson kodiert ein Element in einen JSON-String mit
nicht-escaped HTML-Zeichen.
toRawJson .Item
Das obige gibt die nicht-escaped JSON-String-Darstellung von .Item zurück.
fromYaml
Die Funktion fromYaml nimmt einen YAML-String und gibt ein Objekt zurück,
das in Templates verwendet werden kann.
Datei unter: 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
Die Funktion fromJson nimmt einen JSON-String und gibt ein Objekt zurück,
das in Templates verwendet werden kann.
Datei unter: 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
Die Funktion fromJsonArray nimmt ein JSON-Array und gibt eine Liste zurück,
die in Templates verwendet werden kann.
Datei unter: 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
Die Funktionen toYaml und toYamlPretty kodieren ein Objekt (Liste, Slice,
Array, Dict oder Objekt) in einen eingerückten YAML-String.
Beachten Sie, dass
toYamlPrettyfunktional äquivalent ist, aber YAML mit zusätzlicher Einrückung für Listenelemente ausgibt
# toYaml
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
# toYamlPretty
- name: bob
age: 25
hobbies:
- hiking
- fishing
- cooking
fromYamlArray
Die Funktion fromYamlArray nimmt ein YAML-Array und gibt eine Liste zurück,
die in Templates verwendet werden kann.
Datei unter: 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 }}
Reguläre Ausdrücke
Helm enthält die folgenden Funktionen für reguläre Ausdrücke: regexFind (mustRegexFind), regexFindAll (mustRegexFindAll), regexMatch (mustRegexMatch), regexReplaceAll (mustRegexReplaceAll), regexReplaceAllLiteral (mustRegexReplaceAllLiteral), regexSplit (mustRegexSplit).
regexMatch, mustRegexMatch
Gibt true zurück, wenn der Eingabe-String eine Übereinstimmung mit dem
regulären Ausdruck enthält.
regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com"
Das obige erzeugt true
regexMatch löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexMatch gibt einen Fehler an die Template-Engine zurück, wenn ein
Problem auftritt.
regexFindAll, mustRegexFindAll
Gibt eine Liste aller Übereinstimmungen des regulären Ausdrucks im Eingabe-String zurück. Der letzte Parameter n bestimmt die Anzahl der zurückzugebenden Teilstrings, wobei -1 bedeutet, dass alle Übereinstimmungen zurückgegeben werden.
regexFindAll "[2,4,6,8]" "123456789" -1
Das obige erzeugt [2 4 6 8]
regexFindAll löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexFindAll gibt einen Fehler an die Template-Engine zurück, wenn ein
Problem auftritt.
regexFind, mustRegexFind
Gibt die erste (am weitesten links stehende) Übereinstimmung des regulären Ausdrucks im Eingabe-String zurück.
regexFind "[a-zA-Z][1-9]" "abcd1234"
Das obige erzeugt d1
regexFind löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexFind gibt einen Fehler an die Template-Engine zurück, wenn ein
Problem auftritt.
regexReplaceAll, mustRegexReplaceAll
Gibt eine Kopie des Eingabe-Strings zurück, wobei Übereinstimmungen des
regulären Ausdrucks durch den Ersetzungs-String ersetzt werden. Innerhalb des
Ersetzungs-Strings werden $-Zeichen wie bei Expand interpretiert, sodass z.B.
$1 den Text der ersten Unterübereinstimmung darstellt. Das erste Argument ist
<pattern>, das zweite ist <input> und das dritte ist <replacement>.
regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"
Das obige erzeugt -W-xxW-
regexReplaceAll löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexReplaceAll gibt einen Fehler an die Template-Engine zurück, wenn ein
Problem auftritt.
regexReplaceAllLiteral, mustRegexReplaceAllLiteral
Gibt eine Kopie des Eingabe-Strings zurück, wobei Übereinstimmungen des
regulären Ausdrucks durch den Ersetzungs-String ersetzt werden. Der
Ersetzungs-String wird direkt eingesetzt, ohne Expand zu verwenden. Das erste
Argument ist <pattern>, das zweite ist <input> und das dritte ist
<replacement>.
regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"
Das obige erzeugt -${1}-${1}-
regexReplaceAllLiteral löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexReplaceAllLiteral gibt einen Fehler an die Template-Engine zurück,
wenn ein Problem auftritt.
regexSplit, mustRegexSplit
Teilt den Eingabe-String in Teilstrings auf, die durch den Ausdruck getrennt
sind, und gibt eine Liste der Teilstrings zwischen diesen
Ausdrucksübereinstimmungen zurück. Der letzte Parameter n bestimmt die Anzahl
der zurückzugebenden Teilstrings, wobei -1 bedeutet, dass alle
Übereinstimmungen zurückgegeben werden.
regexSplit "z+" "pizza" -1
Das obige erzeugt [pi a]
regexSplit löst einen Panic aus, wenn ein Problem auftritt, und
mustRegexSplit gibt einen Fehler an die Template-Engine zurück, wenn ein
Problem auftritt.
Kryptografie- und Sicherheitsfunktionen
Helm bietet einige fortgeschrittene kryptografische Funktionen. Diese umfassen adler32sum, buildCustomCert, decryptAES, derivePassword, encryptAES, genCA, genPrivateKey, genSelfSignedCert, genSignedCert, htpasswd, randBytes, sha1sum und sha256sum.
sha1sum
Die Funktion sha1sum empfängt einen String und berechnet dessen SHA1-Digest.
sha1sum "Hello world!"
sha256sum
Die Funktion sha256sum empfängt einen String und berechnet dessen SHA256-Digest.
sha256sum "Hello world!"
Das obige berechnet die SHA-256-Summe in einem "ASCII-armored"-Format, das sicher gedruckt werden kann.
adler32sum
Die Funktion adler32sum empfängt einen String und berechnet dessen
Adler-32-Prüfsumme.
adler32sum "Hello world!"
htpasswd
Die Funktion htpasswd nimmt einen username und ein password und erzeugt
einen bcrypt-Hash des Passworts. Das Ergebnis kann für die
Basis-Authentifizierung auf einem Apache HTTP
Server
verwendet werden.
htpasswd "myUser" "myPassword"
Beachten Sie, dass es unsicher ist, das Passwort direkt im Template zu speichern.
randBytes
Die Funktion randBytes akzeptiert eine Anzahl N und erzeugt eine kryptografisch sichere (verwendet crypto/rand) zufällige Sequenz von N Bytes. Die Sequenz wird als base64-kodierter String zurückgegeben.
randBytes 24
derivePassword
Die Funktion derivePassword kann verwendet werden, um ein bestimmtes Passwort
basierend auf einigen gemeinsamen "Master-Passwort"-Beschränkungen abzuleiten.
Der Algorithmus dafür ist gut
spezifiziert.
derivePassword 1 "long" "password" "user" "example.com"
Beachten Sie, dass es als unsicher gilt, die Teile direkt im Template zu speichern.
genPrivateKey
Die Funktion genPrivateKey erzeugt einen neuen privaten Schlüssel, der in
einen PEM-Block kodiert ist.
Sie nimmt einen der folgenden Werte als ersten Parameter:
ecdsa: Erzeugt einen elliptischen Kurven-DSA-Schlüssel (P256)dsa: Erzeugt einen DSA-Schlüssel (L2048N256)rsa: Erzeugt einen RSA-4096-Schlüssel
buildCustomCert
Die Funktion buildCustomCert ermöglicht die Anpassung des Zertifikats.
Sie nimmt die folgenden String-Parameter:
- Ein base64-kodiertes Zertifikat im PEM-Format
- Ein base64-kodierter privater Schlüssel im PEM-Format
Sie gibt ein Zertifikatsobjekt mit den folgenden Attributen zurück:
Cert: Ein PEM-kodiertes ZertifikatKey: Ein PEM-kodierter privater Schlüssel
Beispiel:
$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"
Beachten Sie, dass das zurückgegebene Objekt an die Funktion genSignedCert
übergeben werden kann, um ein Zertifikat mit dieser CA zu signieren.
genCA
Die Funktion genCA erzeugt ein neues, selbstsigniertes
x509-Zertifizierungsstellenzertifikat.
Sie nimmt die folgenden Parameter:
- Common Name (cn) des Subjekts
- Gültigkeitsdauer des Zertifikats in Tagen
Sie gibt ein Objekt mit den folgenden Attributen zurück:
Cert: Ein PEM-kodiertes ZertifikatKey: Ein PEM-kodierter privater Schlüssel
Beispiel:
$ca := genCA "foo-ca" 365
Beachten Sie, dass das zurückgegebene Objekt an die Funktion genSignedCert
übergeben werden kann, um ein Zertifikat mit dieser CA zu signieren.
genSelfSignedCert
Die Funktion genSelfSignedCert erzeugt ein neues, selbstsigniertes
x509-Zertifikat.
Sie nimmt die folgenden Parameter:
- Common Name (cn) des Subjekts
- Optionale Liste von IPs; kann nil sein
- Optionale Liste alternativer DNS-Namen; kann nil sein
- Gültigkeitsdauer des Zertifikats in Tagen
Sie gibt ein Objekt mit den folgenden Attributen zurück:
Cert: Ein PEM-kodiertes ZertifikatKey: Ein PEM-kodierter privater Schlüssel
Beispiel:
$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365
genSignedCert
Die Funktion genSignedCert erzeugt ein neues x509-Zertifikat, das von der
angegebenen CA signiert ist.
Sie nimmt die folgenden Parameter:
- Common Name (cn) des Subjekts
- Optionale Liste von IPs; kann nil sein
- Optionale Liste alternativer DNS-Namen; kann nil sein
- Gültigkeitsdauer des Zertifikats in Tagen
- CA (siehe
genCA)
Beispiel:
$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
Die Funktion encryptAES verschlüsselt Text mit AES-256 CBC und gibt einen
base64-kodierten String zurück.
encryptAES "secretkey" "plaintext"
decryptAES
Die Funktion decryptAES empfängt einen base64-String, der mit dem
AES-256-CBC-Algorithmus kodiert wurde, und gibt den entschlüsselten Text zurück.
"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"
Datumsfunktionen
Helm enthält die folgenden Datumsfunktionen, die Sie in Templates verwenden können: ago, date, dateInZone, dateModify (mustDateModify), duration, durationRound, htmlDate, htmlDateInZone, now, toDate (mustToDate) und unixEpoch.
now
Das aktuelle Datum/Uhrzeit. Verwenden Sie dies in Verbindung mit anderen Datumsfunktionen.
ago
Die Funktion ago gibt die Dauer seit einer Zeit zurück. Jetzt in
Sekundenauflösung.
ago .CreatedAt
gibt im time.Duration String()-Format zurück
2h34m7s
date
Die Funktion date formatiert ein Datum.
Formatiert das Datum als JAHR-MONAT-TAG:
now | date "2006-01-02"
Die Datumsformatierung in Go ist etwas anders.
Kurz gesagt, nehmen Sie dies als Basisdatum:
Mon Jan 2 15:04:05 MST 2006
Schreiben Sie es in dem Format, das Sie möchten. Oben ist 2006-01-02 dasselbe
Datum, aber in dem gewünschten Format.
dateInZone
Wie date, aber mit einer Zeitzone.
dateInZone "2006-01-02" (now) "UTC"
duration
Formatiert eine gegebene Anzahl von Sekunden als time.Duration.
Dies gibt 1m35s zurück
duration "95"
durationRound
Rundet eine gegebene Dauer auf die signifikanteste Einheit. Strings und
time.Duration werden als Dauer geparst, während eine time.Time als die
Dauer seit diesem Zeitpunkt berechnet wird.
Dies gibt 2h zurück
durationRound "2h10m5s"
Dies gibt 3mo zurück
durationRound "2400h10m5s"
unixEpoch
Gibt die Sekunden seit der Unix-Epoche für eine time.Time zurück.
now | unixEpoch
dateModify, mustDateModify
Die Funktion dateModify nimmt eine Modifikation und ein Datum und gibt den
Zeitstempel zurück.
Subtrahiert eine Stunde und dreißig Minuten von der aktuellen Zeit:
now | dateModify "-1.5h"
Wenn das Modifikationsformat falsch ist, gibt dateModify das Datum unverändert
zurück. mustDateModify gibt andernfalls einen Fehler zurück.
htmlDate
Die Funktion htmlDate formatiert ein Datum zum Einfügen in ein
HTML-Datumsauswahl-Eingabefeld.
now | htmlDate
htmlDateInZone
Wie htmlDate, aber mit einer Zeitzone.
htmlDateInZone (now) "UTC"
toDate, mustToDate
toDate konvertiert einen String in ein Datum. Das erste Argument ist das
Datumslayout und das zweite der Datums-String. Wenn der String nicht
konvertiert werden kann, wird der Nullwert zurückgegeben. mustToDate gibt
einen Fehler zurück, falls der String nicht konvertiert werden kann.
Dies ist nützlich, wenn Sie einen Datums-String in ein anderes Format konvertieren möchten (mit Pipe). Das folgende Beispiel konvertiert "2017-12-31" in "31/12/2017".
toDate "2006-01-02" "2017-12-31" | date "02/01/2006"
Dictionaries und Dict-Funktionen
Helm bietet einen Schlüssel/Wert-Speichertyp namens dict (kurz für
"Dictionary", wie in Python). Ein dict ist ein ungeordneter Typ.
Der Schlüssel eines Dictionary muss ein String sein. Der Wert kann jedoch
jeden Typ haben, einschließlich eines anderen dict oder einer list.
Im Gegensatz zu lists sind dicts nicht unveränderlich. Die Funktionen set
und unset ändern den Inhalt eines Dictionary.
Helm bietet die folgenden Funktionen zur Arbeit mit Dicts: deepCopy (mustDeepCopy), dict, dig, get, hasKey, keys, merge (mustMerge), mergeOverwrite (mustMergeOverwrite), omit, pick, pluck, set, unset und values.
dict
Das Erstellen von Dictionaries erfolgt durch Aufrufen der Funktion dict und
Übergeben einer Liste von Paaren.
Das Folgende erstellt ein Dictionary mit drei Elementen:
$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"
get
Holt bei gegebenem Map und Schlüssel den Wert aus dem Map.
get $myDict "name1"
Das obige gibt "value1" zurück
Beachten Sie, dass diese Operation einfach "" zurückgibt, wenn der Schlüssel
nicht gefunden wird. Es wird kein Fehler erzeugt.
set
Verwenden Sie set, um ein neues Schlüssel/Wert-Paar zu einem Dictionary
hinzuzufügen.
$_ := set $myDict "name4" "value4"
Beachten Sie, dass set das Dictionary zurückgibt (eine Anforderung von
Go-Template-Funktionen), daher müssen Sie den Wert möglicherweise wie oben mit
der $_-Zuweisung auffangen.
unset
Löscht bei gegebenem Map und Schlüssel den Schlüssel aus dem Map.
$_ := unset $myDict "name4"
Wie bei set gibt dies das Dictionary zurück.
Beachten Sie, dass diese Operation einfach zurückkehrt, wenn der Schlüssel nicht gefunden wird. Es wird kein Fehler erzeugt.
hasKey
Die Funktion hasKey gibt true zurück, wenn das gegebene Dict den gegebenen
Schlüssel enthält.
hasKey $myDict "name1"
Wenn der Schlüssel nicht gefunden wird, gibt dies false zurück.
pluck
Die Funktion pluck ermöglicht es, einen Schlüssel und mehrere Maps anzugeben
und eine Liste aller Übereinstimmungen zu erhalten:
pluck "name1" $myDict $myOtherDict
Das obige gibt eine list zurück, die jeden gefundenen Wert enthält ([value1 otherValue1]).
Wenn der gegebene Schlüssel nicht gefunden wird in einem Map, hat dieses Map
kein Element in der Liste (und die Länge der zurückgegebenen Liste ist kleiner
als die Anzahl der Dicts im Aufruf von pluck).
Wenn der Schlüssel gefunden wird, aber der Wert ein leerer Wert ist, wird dieser Wert eingefügt.
Ein gängiges Idiom in Helm-Templates ist die Verwendung von pluck... | first,
um den ersten passenden Schlüssel aus einer Sammlung von Dictionaries zu erhalten.
dig
Die Funktion dig durchläuft eine verschachtelte Menge von Dicts und wählt
Schlüssel aus einer Werteliste aus. Sie gibt einen Standardwert zurück, wenn
einer der Schlüssel im zugehörigen Dict nicht gefunden wird.
dig "user" "role" "humanName" "guest" $dict
Bei einem Dict mit folgender Struktur
{
user: {
role: {
humanName: "curator"
}
}
}
würde das obige "curator" zurückgeben. Wenn das Dict nicht einmal ein
user-Feld hätte, wäre das Ergebnis "guest".
Dig kann sehr nützlich sein in Fällen, in denen Sie Schutzklauseln vermeiden
möchten, besonders da das and des Go-Template-Pakets nicht kurzschließt.
Zum Beispiel wird and a.maybeNil a.maybeNil.iNeedThis immer
a.maybeNil.iNeedThis auswerten und einen Panic auslösen, wenn a kein
maybeNil-Feld hat.)
dig akzeptiert sein Dict-Argument zuletzt, um Pipelining zu unterstützen. Zum Beispiel:
merge a b c | dig "one" "two" "three" "<missing>"
merge, mustMerge
Führt zwei oder mehr Dictionaries zu einem zusammen, wobei das Ziel-Dictionary Vorrang hat:
Gegeben:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
ergibt sich:
newdict:
default: default
overwrite: me
key: true
$newdict := merge $dest $source1 $source2
Dies ist eine tiefe Merge-Operation, aber keine tiefe Kopier-Operation.
Verschachtelte Objekte, die zusammengeführt werden, sind dieselbe Instanz in
beiden Dicts. Wenn Sie eine tiefe Kopie zusammen mit dem Merge möchten,
verwenden Sie die Funktion deepCopy zusammen mit dem Merging. Zum Beispiel:
deepCopy $source | merge $dest
mustMerge gibt einen Fehler zurück, falls das Merge nicht erfolgreich ist.
mergeOverwrite, mustMergeOverwrite
Führt zwei oder mehr Dictionaries zu einem zusammen, wobei der Vorrang von rechts nach links gilt, also Werte im Ziel-Dictionary überschrieben werden:
Gegeben:
dest:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
ergibt sich:
newdict:
default: default
overwrite: overwritten
key: false
$newdict := mergeOverwrite $dest $source1 $source2
Dies ist eine tiefe Merge-Operation, aber keine tiefe Kopier-Operation.
Verschachtelte Objekte, die zusammengeführt werden, sind dieselbe Instanz in
beiden Dicts. Wenn Sie eine tiefe Kopie zusammen mit dem Merge möchten,
verwenden Sie die Funktion deepCopy zusammen mit dem Merging. Zum Beispiel:
deepCopy $source | mergeOverwrite $dest
mustMergeOverwrite gibt einen Fehler zurück, falls das Merge nicht
erfolgreich ist.
keys
Die Funktion keys gibt eine list aller Schlüssel in einem oder mehreren
dict-Typen zurück. Da ein Dictionary ungeordnet ist, sind die Schlüssel
nicht in einer vorhersagbaren Reihenfolge. Sie können mit sortAlpha sortiert
werden.
keys $myDict | sortAlpha
Bei der Angabe mehrerer Dictionaries werden die Schlüssel verkettet. Verwenden
Sie die Funktion uniq zusammen mit sortAlpha, um eine eindeutige, sortierte
Liste von Schlüsseln zu erhalten.
keys $myDict $myOtherDict | uniq | sortAlpha
pick
Die Funktion pick wählt nur die angegebenen Schlüssel aus einem Dictionary
aus und erstellt ein neues dict.
$new := pick $myDict "name1" "name2"
Das obige gibt {name1: value1, name2: value2} zurück
omit
Die Funktion omit ähnelt pick, gibt aber ein neues dict mit allen
Schlüsseln zurück, die nicht mit den angegebenen Schlüsseln übereinstimmen.
$new := omit $myDict "name1" "name3"
Das obige gibt {name2: value2} zurück
values
Die Funktion values ähnelt keys, gibt aber eine neue list mit allen
Werten des Quell-dict zurück (nur ein Dictionary wird unterstützt).
$vals := values $myDict
Das obige gibt list["value1", "value2", "value 3"] zurück. Beachten Sie, dass
die Funktion values keine Garantien für die Reihenfolge des Ergebnisses gibt;
wenn Ihnen das wichtig ist, verwenden Sie sortAlpha.
deepCopy, mustDeepCopy
Die Funktionen deepCopy und mustDeepCopy nehmen einen Wert und erstellen
eine tiefe Kopie des Wertes. Dies umfasst Dicts und andere Strukturen.
deepCopy löst einen Panic aus, wenn ein Problem auftritt, während
mustDeepCopy einen Fehler an das Template-System zurückgibt, wenn ein Fehler
auftritt.
dict "a" 1 "b" 2 | deepCopy
Eine Anmerkung zu Dict-Interna
Ein dict ist in Go als map[string]interface{} implementiert. Go-Entwickler
können map[string]interface{}-Werte in den Kontext übergeben, um sie für
Templates als dicts verfügbar zu machen.
Encoding-Funktionen
Helm hat die folgenden Kodierungs- und Dekodierungsfunktionen:
b64enc/b64dec: Kodieren oder Dekodieren mit Base64b32enc/b32dec: Kodieren oder Dekodieren mit Base32
Listen und List-Funktionen
Helm bietet einen einfachen list-Typ, der beliebige sequentielle Datenlisten
enthalten kann. Dies ähnelt Arrays oder Slices, aber Listen sind so konzipiert,
dass sie als unveränderliche Datentypen verwendet werden.
Erstellen Sie eine Liste von Integers:
$myList := list 1 2 3 4 5
Das obige erstellt eine Liste von [1 2 3 4 5].
Helm bietet die folgenden List-Funktionen: 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 und without (mustWithout).
first, mustFirst
Um das erste Element einer Liste zu erhalten, verwenden Sie first.
first $myList gibt 1 zurück
first löst einen Panic aus, wenn ein Problem auftritt, während mustFirst
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
rest, mustRest
Um den Rest der Liste zu erhalten (alles außer dem ersten Element), verwenden
Sie rest.
rest $myList gibt [2 3 4 5] zurück
rest löst einen Panic aus, wenn ein Problem auftritt, während mustRest
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
last, mustLast
Um das letzte Element einer Liste zu erhalten, verwenden Sie last:
last $myList gibt 5 zurück. Dies entspricht ungefähr dem Umkehren einer
Liste und dem anschließenden Aufrufen von first.
initial, mustInitial
Dies ergänzt last, indem alle Elemente außer dem letzten zurückgegeben
werden. initial $myList gibt [1 2 3 4] zurück.
initial löst einen Panic aus, wenn ein Problem auftritt, während
mustInitial einen Fehler an die Template-Engine zurückgibt, wenn ein Problem
auftritt.
append, mustAppend
Fügt ein neues Element zu einer bestehenden Liste hinzu und erstellt eine neue Liste.
$new = append $myList 6
Das obige würde $new auf [1 2 3 4 5 6] setzen. $myList bleibt unverändert.
append löst einen Panic aus, wenn ein Problem auftritt, während mustAppend
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
prepend, mustPrepend
Fügt ein Element am Anfang einer Liste ein und erstellt eine neue Liste.
prepend $myList 0
Das obige würde [0 1 2 3 4 5] erzeugen. $myList bleibt unverändert.
prepend löst einen Panic aus, wenn ein Problem auftritt, während mustPrepend
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
concat
Verkettet eine beliebige Anzahl von Listen zu einer.
concat $myList ( list 6 7 ) ( list 8 )
Das obige würde [1 2 3 4 5 6 7 8] erzeugen. $myList bleibt unverändert.
reverse, mustReverse
Erzeugt eine neue Liste mit den umgekehrten Elementen der gegebenen Liste.
reverse $myList
Das obige würde die Liste [5 4 3 2 1] erzeugen.
reverse löst einen Panic aus, wenn ein Problem auftritt, während
mustReverse einen Fehler an die Template-Engine zurückgibt, wenn ein Problem
auftritt.
uniq, mustUniq
Erzeugt eine Liste, aus der alle Duplikate entfernt wurden.
list 1 1 1 2 | uniq
Das obige würde [1 2] erzeugen
uniq löst einen Panic aus, wenn ein Problem auftritt, während mustUniq
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
without, mustWithout
Die Funktion without filtert Elemente aus einer Liste heraus.
without $myList 3
Das obige würde [1 2 4 5] erzeugen
without kann mehr als einen Filter haben:
without $myList 1 3 5
Das würde [2 4] erzeugen
without löst einen Panic aus, wenn ein Problem auftritt, während
mustWithout einen Fehler an die Template-Engine zurückgibt, wenn ein Problem
auftritt.
has, mustHas
Prüft, ob eine Liste ein bestimmtes Element enthält.
has 4 $myList
Das obige würde true zurückgeben, während has "hello" $myList false
zurückgeben würde.
has löst einen Panic aus, wenn ein Problem auftritt, während mustHas einen
Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
compact, mustCompact
Akzeptiert eine Liste und entfernt Einträge mit leeren Werten.
$list := list 1 "a" "foo" ""
$copy := compact $list
compact gibt eine neue Liste zurück, aus der das leere (d.h. "") Element
entfernt wurde.
compact löst einen Panic aus, wenn ein Problem auftritt, und mustCompact
gibt einen Fehler an die Template-Engine zurück, wenn ein Problem auftritt.
index
Um das n-te Element einer Liste zu erhalten, verwenden Sie index list [n]. Um
in mehrdimensionale Listen zu indizieren, verwenden Sie index list [n] [m] ...
index $myList 0gibt1zurück. Es entsprichtmyList[0]index $myList 0 1würdemyList[0][1]entsprechen
slice, mustSlice
Um Teilelemente einer Liste zu erhalten, verwenden Sie slice list [n] [m]. Es
entspricht list[n:m].
slice $myListgibt[1 2 3 4 5]zurück. Es entsprichtmyList[:].slice $myList 3gibt[4 5]zurück. Es entsprichtmyList[3:].slice $myList 1 3gibt[2 3]zurück. Es entsprichtmyList[1:3].slice $myList 0 3gibt[1 2 3]zurück. Es entsprichtmyList[:3].
slice löst einen Panic aus, wenn ein Problem auftritt, während mustSlice
einen Fehler an die Template-Engine zurückgibt, wenn ein Problem auftritt.
until
Die Funktion until erstellt einen Bereich von Integers.
until 5
Das obige erzeugt die Liste [0, 1, 2, 3, 4].
Dies ist nützlich für Schleifen mit range $i, $e := until 5.
untilStep
Wie until erzeugt untilStep eine Liste von Zähl-Integers. Aber es erlaubt
die Definition eines Starts, Stopps und Schritts:
untilStep 3 6 2
Das obige erzeugt [3 5], indem es bei 3 beginnt und 2 addiert, bis es gleich
oder größer als 6 ist. Dies ähnelt Pythons range-Funktion.
seq
Funktioniert wie der Bash-Befehl seq.
- 1 Parameter (end) - erzeugt alle Zähl-Integers zwischen 1 und
endeinschließlich. - 2 Parameter (start, end) - erzeugt alle Zähl-Integers zwischen
startundendeinschließlich, inkrementierend oder dekrementierend um 1. - 3 Parameter (start, step, end) - erzeugt alle Zähl-Integers zwischen
startundendeinschließlich, inkrementierend oder dekrementierend umstep.
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
Um eine Liste in Chunks einer gegebenen Größe zu teilen, verwenden Sie chunk size list. Dies ist nützlich für Paginierung.
chunk 3 (list 1 2 3 4 5 6 7 8)
Dies erzeugt eine Liste von Listen [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 ] ].
Mathematische Funktionen
Alle mathematischen Funktionen arbeiten mit int64-Werten, sofern nicht anders
angegeben.
Die folgenden mathematischen Funktionen sind verfügbar: add, add1, ceil, div, floor, len, max, min, mod, mul, round und sub.
add
Summiert Zahlen mit add. Akzeptiert zwei oder mehr Eingaben.
add 1 2 3
add1
Um um 1 zu inkrementieren, verwenden Sie add1.
sub
Zum Subtrahieren verwenden Sie sub.
div
Führt Integer-Division mit div durch.
mod
Modulo mit mod.
mul
Multipliziert mit mul. Akzeptiert zwei oder mehr Eingaben.
mul 1 2 3
max
Gibt den größten aus einer Reihe von Integers zurück.
Dies gibt 3 zurück:
max 1 2 3
min
Gibt den kleinsten aus einer Reihe von Integers zurück.
min 1 2 3 gibt 1 zurück.
len
Gibt die Länge des Arguments als Integer zurück.
len .Arg
Float-Mathematik-Funktionen
Alle mathematischen Funktionen arbeiten mit float64-Werten.
addf
Summiert Zahlen mit addf
Dies gibt 5.5 zurück:
addf 1.5 2 2
add1f
Um um 1 zu inkrementieren, verwenden Sie add1f
subf
Zum Subtrahieren verwenden Sie subf
Dies entspricht 7.5 - 2 - 3 und gibt 2.5 zurück:
subf 7.5 2 3
divf
Führt Integer-Division mit divf durch
Dies entspricht 10 / 2 / 4 und gibt 1.25 zurück:
divf 10 2 4
mulf
Multipliziert mit mulf
Dies gibt 6 zurück:
mulf 1.5 2 2
maxf
Gibt den größten aus einer Reihe von Floats zurück:
Dies gibt 3 zurück:
maxf 1 2.5 3
minf
Gibt den kleinsten aus einer Reihe von Floats zurück.
Dies gibt 1.5 zurück:
minf 1.5 2 3
floor
Gibt den größten Float-Wert zurück, der kleiner oder gleich dem Eingabewert ist.
floor 123.9999 gibt 123.0 zurück.
ceil
Gibt den größten Float-Wert zurück, der größer oder gleich dem Eingabewert ist.
ceil 123.001 gibt 124.0 zurück.
round
Gibt einen Float-Wert zurück, bei dem der Rest auf die angegebene Anzahl von Nachkommastellen gerundet ist.
round 123.555555 3 gibt 123.556 zurück.
Netzwerk-Funktionen
Helm hat eine einzige Netzwerk-Funktion, getHostByName.
Die Funktion getHostByName empfängt einen Domainnamen und gibt die
IP-Adresse zurück.
getHostByName "www.google.com" würde die entsprechende IP-Adresse von
www.google.com zurückgeben.
Diese Funktion erfordert, dass die Option --enable-dns an der
Helm-Kommandozeile übergeben wird.
Dateipfad-Funktionen
Obwohl Helm-Template-Funktionen keinen Zugriff auf das Dateisystem gewähren, bieten sie Funktionen für die Arbeit mit Strings, die Dateipfad-Konventionen folgen. Diese umfassen base, clean, dir, ext und isAbs.
base
Gibt das letzte Element eines Pfades zurück.
base "foo/bar/baz"
Das obige gibt "baz" aus.
dir
Gibt das Verzeichnis zurück und entfernt den letzten Teil des Pfades. Also gibt
dir "foo/bar/baz" foo/bar zurück.
clean
Bereinigt einen Pfad.
clean "foo/bar/../baz"
Das obige löst das .. auf und gibt foo/baz zurück.
ext
Gibt die Dateierweiterung zurück.
ext "foo.bar"
Das obige gibt .bar zurück.
isAbs
Um zu prüfen, ob ein Dateipfad absolut ist, verwenden Sie isAbs.
Reflection-Funktionen
Helm bietet grundlegende Reflection-Tools. Diese helfen fortgeschrittenen Template-Entwicklern, die zugrunde liegenden Go-Typinformationen für einen bestimmten Wert zu verstehen. Helm ist in Go geschrieben und streng typisiert. Das Typsystem gilt auch innerhalb von Templates.
Go hat mehrere primitive Arten, wie string, slice, int64 und bool.
Go hat ein offenes Typ-System, das es Entwicklern ermöglicht, eigene Typen zu erstellen.
Helm bietet eine Reihe von Funktionen für jede über Kind-Funktionen und Type-Funktionen. Eine deepEqual-Funktion wird ebenfalls bereitgestellt, um zwei Werte zu vergleichen.
Kind-Funktionen
Es gibt zwei Kind-Funktionen: kindOf gibt die Art eines Objekts zurück.
kindOf "hello"
Das obige würde string zurückgeben. Für einfache Tests (wie in if-Blöcken)
können Sie mit der Funktion kindIs prüfen, ob ein Wert eine bestimmte Art hat:
kindIs "int" 123
Das obige gibt true zurück.
Type-Funktionen
Typen sind etwas schwieriger zu handhaben, daher gibt es drei verschiedene Funktionen:
typeOfgibt den zugrunde liegenden Typ eines Wertes zurück:typeOf $footypeIsist wiekindIs, aber für Typen:typeIs "*io.Buffer" $myValtypeIsLikefunktioniert wietypeIs, dereferenziert aber auch Pointer
Hinweis: Keine dieser Funktionen kann testen, ob etwas ein bestimmtes Interface implementiert, da dies erfordern würde, das Interface vorab zu kompilieren.
deepEqual
deepEqual gibt true zurück, wenn zwei Werte "tief
gleich" sind.
Funktioniert auch für nicht-primitive Typen (im Gegensatz zum eingebauten eq).
deepEqual (list 1 2 3) (list 1 2 3)
Das obige gibt true zurück.
Semantische Versionsfunktionen
Einige Versionsschemata sind leicht parsebar und vergleichbar. Helm bietet Funktionen für die Arbeit mit SemVer 2-Versionen. Diese umfassen semver und semverCompare. Im Folgenden finden Sie auch Details zur Verwendung von Bereichen für Vergleiche.
semver
Die Funktion semver parst einen String in eine Semantische Version:
$version := semver "1.2.3-alpha.1+123"
Wenn der Parser fehlschlägt, wird die Template-Ausführung mit einem Fehler angehalten.
An diesem Punkt ist $version ein Pointer auf ein Version-Objekt mit den
folgenden Eigenschaften:
$version.Major: Die Hauptversionsnummer (1oben)$version.Minor: Die Nebenversionsnummer (2oben)$version.Patch: Die Patch-Nummer (3oben)$version.Prerelease: Das Prerelease (alpha.1oben)$version.Metadata: Die Build-Metadaten (123oben)$version.Original: Die Originalversion als String
Zusätzlich können Sie eine Version mit einer anderen Version mithilfe der
Compare-Funktion vergleichen:
semver "1.4.3" | (semver "1.2.3").Compare
Das obige gibt -1 zurück.
Die Rückgabewerte sind:
-1wenn die gegebene Semver größer ist als die Semver, derenCompare-Methode aufgerufen wurde1wenn die Version, derenCompare-Funktion aufgerufen wurde, größer ist.0wenn sie dieselbe Version sind
(Beachten Sie, dass in SemVer das Metadata-Feld bei Versionsvergleichen nicht
verglichen wird.)
semverCompare
Eine robustere Vergleichsfunktion wird als semverCompare bereitgestellt. Diese
Version unterstützt Versionsbereiche:
semverCompare "1.2.3" "1.2.3"prüft auf eine exakte ÜbereinstimmungsemverCompare "~1.2.0" "1.2.3"prüft, ob die Haupt- und Nebenversionen übereinstimmen und ob die Patch-Nummer der zweiten Version größer oder gleich dem ersten Parameter ist.
Die SemVer-Funktionen verwenden die Masterminds semver-Bibliothek von den Machern von Sprig.
Einfache Vergleiche
Es gibt zwei Elemente bei den Vergleichen. Erstens ist ein Vergleichs-String
eine Liste von durch Leerzeichen oder Kommas getrennten AND-Vergleichen. Diese
werden dann durch || (OR)-Vergleiche getrennt. Zum Beispiel sucht ">= 1.2 < 3.0.0 || >= 4.2.3" nach einem Vergleich, der größer oder gleich 1.2 und kleiner
als 3.0.0 ist oder größer oder gleich 4.2.3 ist.
Die grundlegenden Vergleiche sind:
=: gleich (Alias für keinen Operator)!=: ungleich>: größer als<: kleiner als>=: größer oder gleich<=: kleiner oder gleich
Arbeiten mit Prerelease-Versionen
Prereleases sind, für diejenigen, die damit nicht vertraut sind, für
Software-Releases vor stabilen oder allgemein verfügbaren Releases gedacht.
Beispiele für Prereleases sind Entwicklungs-, Alpha-, Beta- und
Release-Candidate-Releases. Ein Prerelease kann eine Version wie 1.2.3-beta.1
sein, während der stabile Release 1.2.3 wäre. In der Rangfolge kommen
Prereleases vor ihren zugehörigen Releases. In diesem Beispiel 1.2.3-beta.1 < 1.2.3.
Gemäß der Semantic-Version-Spezifikation sind Prereleases möglicherweise nicht API-kompatibel mit ihrem Release-Gegenstück. Es heißt:
Eine Prerelease-Version zeigt an, dass die Version instabil ist und möglicherweise nicht die beabsichtigten Kompatibilitätsanforderungen erfüllt, wie sie durch ihre zugehörige normale Version gekennzeichnet sind.
SemVer-Vergleiche mit Constraints ohne Prerelease-Vergleicher überspringen
Prerelease-Versionen. Zum Beispiel überspringt >=1.2.3 Prereleases beim
Durchsuchen einer Liste von Releases, während >=1.2.3-0 Prereleases
auswertet und findet.
Der Grund für die 0 als Prerelease-Version im Beispielvergleich ist, dass
Prereleases nur ASCII-alphanumerische Zeichen und Bindestriche (zusammen mit
.-Trennzeichen) enthalten können, gemäß Spezifikation. Die Sortierung erfolgt
in ASCII-Sortierreihenfolge, ebenfalls gemäß Spezifikation. Das niedrigste
Zeichen ist eine 0 in der ASCII-Sortierreihenfolge (siehe eine
ASCII-Tabelle)
Das Verständnis der ASCII-Sortierreihenfolge ist wichtig, da A-Z vor a-z kommt.
Das bedeutet, >=1.2.3-BETA gibt 1.2.3-alpha zurück. Was Sie von
Groß-/Kleinschreibungsempfindlichkeit erwarten könnten, gilt hier nicht. Dies
liegt an der ASCII-Sortierreihenfolge, die die Spezifikation vorgibt.
Bindestrich-Bereichsvergleiche
Es gibt mehrere Methoden zur Handhabung von Bereichen, und die erste sind Bindestrich-Bereiche. Diese sehen so aus:
1.2 - 1.4.5was äquivalent ist zu>= 1.2 <= 1.4.52.3.4 - 4.5was äquivalent ist zu>= 2.3.4 <= 4.5
Wildcards in Vergleichen
Die Zeichen x, X und * können als Wildcard-Zeichen verwendet werden. Dies
funktioniert für alle Vergleichsoperatoren. Bei Verwendung mit dem =-Operator
fällt es auf den Patch-Level-Vergleich zurück (siehe Tilde unten). Zum Beispiel:
1.2.xist äquivalent zu>= 1.2.0, < 1.3.0>= 1.2.xist äquivalent zu>= 1.2.0<= 2.xist äquivalent zu< 3*ist äquivalent zu>= 0.0.0
Tilde-Bereichsvergleiche (Patch)
Der Tilde (~)-Vergleichsoperator ist für Patch-Level-Bereiche, wenn eine
Nebenversion angegeben ist, und für Major-Level-Änderungen, wenn die
Nebenversionsnummer fehlt. Zum Beispiel:
~1.2.3ist äquivalent zu>= 1.2.3, < 1.3.0~1ist äquivalent zu>= 1, < 2~2.3ist äquivalent zu>= 2.3, < 2.4~1.2.xist äquivalent zu>= 1.2.0, < 1.3.0~1.xist äquivalent zu>= 1, < 2
Caret-Bereichsvergleiche (Major)
Der Caret (^)-Vergleichsoperator ist für Major-Level-Änderungen, sobald ein
stabiles (1.0.0) Release erfolgt ist. Vor einem 1.0.0-Release fungiert die
Nebenversion als API-Stabilitätsstufe. Dies ist nützlich bei Vergleichen von
API-Versionen, da eine Major-Änderung API-brechend ist. Zum Beispiel:
^1.2.3ist äquivalent zu>= 1.2.3, < 2.0.0^1.2.xist äquivalent zu>= 1.2.0, < 2.0.0^2.3ist äquivalent zu>= 2.3, < 3^2.xist äquivalent zu>= 2.0.0, < 3^0.2.3ist äquivalent zu>=0.2.3 <0.3.0^0.2ist äquivalent zu>=0.2.0 <0.3.0^0.0.3ist äquivalent zu>=0.0.3 <0.0.4^0.0ist äquivalent zu>=0.0.0 <0.1.0^0ist äquivalent zu>=0.0.0 <1.0.0
URL-Funktionen
Helm enthält die Funktionen urlParse, urlJoin und urlquery, die Ihnen die Arbeit mit URL-Teilen ermöglichen.
urlParse
Parst einen String als URL und erzeugt ein Dict mit URL-Teilen
urlParse "http://admin:secret@server.com:8080/api?list=false#anchor"
Das obige gibt ein Dict zurück, das das URL-Objekt enthält:
scheme: 'http'
host: 'server.com:8080'
path: '/api'
query: 'list=false'
opaque: nil
fragment: 'anchor'
userinfo: 'admin:secret'
Dies wird mit den URL-Paketen aus der Go-Standardbibliothek implementiert. Für weitere Informationen siehe https://golang.org/pkg/net/url/#URL
urlJoin
Verbindet ein Map (erzeugt von urlParse) zu einem URL-String
urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http")
Das obige gibt den folgenden String zurück:
http://host:80/path?query#fragment
urlquery
Gibt die escaped Version des übergebenen Werts zurück, sodass er zum Einbetten in den Query-Teil einer URL geeignet ist.
$var := urlquery "string for query"
UUID-Funktionen
Helm kann UUID v4 universell eindeutige Identifikatoren generieren.
uuidv4
Das obige gibt eine neue UUID vom Typ v4 (zufällig generiert) zurück.
Kubernetes- und Chart-Funktionen
Helm enthält Funktionen für die Arbeit mit Kubernetes, darunter .Capabilities.APIVersions.Has, Files und lookup.
lookup
lookup wird verwendet, um Ressourcen in einem laufenden Cluster nachzuschlagen.
Bei Verwendung mit dem Befehl helm template gibt es immer eine leere Antwort
zurück.
Weitere Details finden Sie in der Dokumentation zur lookup-Funktion.
.Capabilities.APIVersions.Has
Gibt zurück, ob eine API-Version oder Ressource in einem Cluster verfügbar ist.
.Capabilities.APIVersions.Has "apps/v1"
.Capabilities.APIVersions.Has "apps/v1/Deployment"
Weitere Informationen finden Sie in der Dokumentation der eingebauten Objekte.
File-Funktionen
Es gibt mehrere Funktionen, die Ihnen den Zugriff auf nicht-spezielle Dateien innerhalb eines Charts ermöglichen. Zum Beispiel zum Zugriff auf Anwendungskonfigurationsdateien. Diese sind dokumentiert unter Zugriff auf Dateien in Templates.
Hinweis: Die Dokumentation für viele dieser Funktionen stammt von Sprig. Sprig ist eine Template-Funktionsbibliothek, die für Go-Anwendungen verfügbar ist.