Список функцій шаблонів
Helm містить багато функцій шаблонів, якими ви можете скористатися у шаблонах. Вони перераховані тут і розбиті на наступні категорії:
- Криптографія та безпека
- Дата
- Словники
- Кодування
- Шлях до файлу
- Kubernetes та чарти
- Логіка та керування потоком
- Списки
- Математичні функції
- Математичні обчислення з комою
- Мережа
- Аналіз
- Регулярні вирази
- Семантичні версії
- Рядки
- Перетворення типів
- URL
- UUID
Логічні функції та функції керування потоком
Helm містить численні логічні та контрольні функції, включаючи and, coalesce, default, empty, eq, fail, ge, gt, le, lt, ne, not, or, і required.
and
Повертає логічне AND для двох або більше аргументів (перший пустий аргумент або останній аргумент).
and .Arg1 .Arg2
or
Повертає логічне OR для двох або більше аргументів (перший непустий аргумент або останній аргумент).
or .Arg1 .Arg2
not
Повертає логічне заперечення свого аргументу.
not .Arg
eq
Повертає логічну рівність аргументів (наприклад, Arg1 == Arg2).
eq .Arg1 .Arg2
ne
Повертає логічну нерівність аргументів (наприклад, Arg1 != Arg2)
ne .Arg1 .Arg2
lt
Повертає логічне true, якщо перший аргумент менший за другий. В іншому випадку повертає false (наприклад, Arg1 < Arg2).
lt .Arg1 .Arg2
le
Повертає логічне true, якщо перший аргумент менший або дорівнює другому. В іншому випадку повертає false (наприклад, Arg1 <= Arg2).
le .Arg1 .Arg2
gt
Повертає логічне true, якщо перший аргумент більший за другий. В іншому випадку повертає false (наприклад, Arg1 > Arg2).
gt .Arg1 .Arg2
ge
Повертає логічне true, якщо перший аргумент більший або дорівнює другому. В іншому випадку повертає false (наприклад, Arg1 >= Arg2).
ge .Arg1 .Arg2
default
Щоб встановити просте стандартне значення, використовуйте default:
default "foo" .Bar
У наведеному прикладі, якщо .Bar має непусте значення, воно буде використане. Якщо ж воно пусте, повернеться foo.
Визначення "пустого" залежить від типу:
- Числові: 0
- Рядок: ""
- Списки:
[] - Словники:
{} - Логічний:
false - І завжди
nil(або null)
Для структур немає визначення пустого значення, тому структура ніколи не поверне стандартного значення.
required
Вкажіть значення, які повинні бути встановлені, за допомогою required:
required "A valid foo is required!" .Bar
Якщо .Bar є пустим або не визначеним (див. default щодо того, як це оцінюється), шаблон не буде згенерований і поверне надане повідомлення про помилку.
empty
Функція empty повертає true, якщо надане значення вважається пустим, і false в іншому випадку. Пусті значення перелічені в розділі default.
empty .Foo
Зверніть увагу, що в умовах шаблонів Go пустота розраховується автоматично. Таким чином, рідко потрібно використовувати if not empty .Foo. Замість цього просто використовуйте if .Foo.
fail
Безумовно повертає пустий string та error з зазначеним текстом. Це корисно в ситуаціях, коли інші умови визначили, що рендеринг шаблону повинен зазнати невдачі.
fail "Please accept the end user license agreement"
coalesce
Функція coalesce приймає список значень і повертає перше непусте.
coalesce 0 1 2
У наведеному випадку повертає 1.
Ця функція корисна для перевірки кількох змінних або значень:
coalesce .name .parent.name "Matt"
Цей приклад спочатку перевірить, чи є .name непустим. Якщо це так, буде повернене це значення. Якщо ж воно пусте, coalesce перевірить .parent.name на пустоту. Нарешті, якщо обидва .name і .parent.name пусті, буде повернене Matt.
ternary
Функція ternary приймає два значення і тестове значення. Якщо тестове значення є true, повернеться перше значення. Якщо тестове значення є пустим, повернеться друге значення. Це подібно до тернарного оператора в C та інших мовах програмування.
тестове значення true
ternary "foo" "bar" true
або
true | ternary "foo" "bar"
У цьому випадку повертається "foo".
тестове значення false
ternary "foo" "bar" false
або
false | ternary "foo" "bar"
У цьому випадку повертається "bar".
Функції для роботи з рядками
Helm включає такі функції для рядків: 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, і wrapWith.
print
Повертає рядок, що є комбінацією його частин.
print "Matt has " .Dogs " dogs"
Типи, які не є рядками, перетворюються на рядки, якщо це можливо.
Зверніть увагу, що коли два аргументи поруч один з одним не є рядками, між ними додається пробіл.
println
Працює так само як print, але додає новий рядок наприкінці.
printf
Повертає рядок на основі відформатованого рядка та аргументів, що передаються у до нього.
printf "%s has %d dogs." .Name .NumberDogs
Заповнювач, який слід використовувати, залежить від типу переданого аргументу. Серед них:
Загального призначення:
%vзначення в стандартному форматі- при друку словників, прапорець
+(%+v) додає імена полів
- при друку словників, прапорець
%%літеральний знак відсотка; не використовує значення
Логічний:
%tслово true або false
Цілі числа:
%bдвійкові, основа 2%cсимвол, що відповідає точці Unicode%dдесяткові, основа 10%oвісімкові, основа 8%Oоснова 8 з префіксом 0o%qвісімкові, однорядковий літерал символу, безпечно екранований%xшістнадцяткові, основа 16, з малими літерами для a-f%Xшістнадцяткові, основа 16, з великими літерами для A-F%UUnicode формат: U+1234; те ж саме, що "U+%04X"
Числа з плаваючою комою та складові частини:
%bдесятковий формат без наукової нотації з показником ступеня двійки, наприклад -123456p-78%eнаукова нотація, наприклад -1.234456e+78%Eнаукова нотація, наприклад -1.234456E+78%fдесятковий формат без експоненти, наприклад 123.456%Fсинонім для %f%g%e для великих експонент, %f в іншому випадку%G%E для великих експонент, %F в іншому випадку%xшістнадцяткова нотація (з десятковим показником ступеня), наприклад -0x1.23abcp+20%Xшістнадцяткова нотація у верхньому регістрі, наприклад -0X1.23ABCP+20
Рядок та зріз байтів (обробляються однаково з цими діями):
%sнеоброблені байти рядка або зрізу%qрядок в подвійних лапках, безпечно екранований%xоснова 16, малий регістр, два символи на байт%Xоснова 16, великий регістр, два символи на байт
Зріз:
%pадреса 0-го елемента у шістнадцятковій нотації, з передуючим 0x
trim
Функція trim видаляє пробіли з обох сторін рядка:
trim " hello "
У результаті отримаємо hello.
trimAll
Видаляє зазначені символи з початку та кінця рядка:
trimAll "$" "$5.00"
У результаті отримаємо 5.00 (як рядок).
trimPrefix
Видаляє лише префікс з рядка:
trimPrefix "-" "-hello"
У результаті отримаємо hello.
trimSuffix
Видаляє лише суфікс з рядка:
trimSuffix "-" "hello-"
У результаті отримаємо hello.
lower
Перетворює весь рядок у нижній регістр:
lower "HELLO"
У результаті отримаємо hello.
upper
Перетворює весь рядок у верхній регістр:
upper "hello"
У результаті отримаємо HELLO.
title
Перетворює рядок у титульний регістр:
title "hello world"
У результаті отримаємо Hello World.
untitle
Видаляє титульне оформлення. untitle "Hello World" поверне hello world.
repeat
Повторює рядок кілька разів:
repeat 3 "hello"
У результаті отримаємо hellohellohello.
substr
Отримує підрядок з рядка. Параметри:
- start (int)
- end (int)
- рядок (string)
substr 0 5 "hello world"
У результаті отримаємо hello.
nospace
Видаляє всі пробіли з рядка:
nospace "hello w o r l d"
У результаті отримаємо helloworld.
trunc
Обрізає рядок:
trunc 5 "hello world"
У результаті отримаємо hello.
trunc -5 "hello world"
У результаті отримаємо world.
abbrev
Обрізає рядок додаючи три крапки (...):
Параметри:
- максимальна довжина
- рядок
abbrev 5 "hello world"
У результаті отримаємо he..., оскільки ширина трьох крапок враховується до максимальної довжини.
abbrevboth
Обрізає обидві сторони:
abbrevboth 5 10 "1234 5678 9123"
У результаті отримаємо ...5678....
Параметри:
- зсув ліворуч
- максимальна довжина
- рядок
initials
Для кількох слів бере першу літеру кожного слова та обʼєднує їх:
initials "First Try"
У результаті отримаємо FT.
randAlphaNum, randAlpha, randNumeric та randAscii
Ці чотири функції генерують криптографічно безпечні (використовує crypto/rand) випадкові рядки, але з різними базовими наборами символів:
randAlphaNumвикористовує0-9a-zA-ZrandAlphaвикористовуєa-zA-ZrandNumericвикористовує0-9randAsciiвикористовує всі друковані ASCII символи
Кожна з них приймає один параметр: цілу довжину рядка.
randNumeric 3
У результаті отримаємо випадковий рядок з трьох цифр.
wrap
Виконує перенесення тексту на вказаній кількості стовпців:
wrap 80 $someText
У результаті для рядка $someText буде виконано перенесення на 80-му стовпці.
wrapWith
wrapWith працює так само як і wrap, але дозволяє вказати рядок для перенесення.
(wrap використовує \n)
wrapWith 5 "\t" "Hello World"
У результаті отримаємо Hello World (де пробіл є символом ASCII табуляції).
contains
Перевіряє, чи один рядок міститься всередині іншого:
contains "cat" "catch"
У результаті отримаємо true, оскільки catch містить cat.
hasPrefix і hasSuffix
Функції hasPrefix і hasSuffix перевіряють, чи має рядок заданий префікс або суфікс:
hasPrefix "cat" "catch"
У результаті отримаємо true, оскільки catch має префікс cat.
quote і squote
Ці функції обгортають рядок у подвійні лапки (quote) або одинарні лапки (squote).
cat
Функція cat обʼєднує кілька рядків в один, розділяючи їх пробілами:
cat "hello" "beautiful" "world"
У результаті отримаємо hello beautiful world.
indent
Функція indent додає відступ у кожному рядку вказаного тексту на зазначену кількість символів. Це корисно для вирівнювання багаторядкових текстів:
indent 4 $lots_of_text
У результаті кожен рядок тексту буде мати відступ на 4 символи пробілу.
nindent
Функція nindent є такою ж, як і indent, але додає новий рядок на початку рядка.
nindent 4 $lots_of_text
У результаті кожен рядок тексту буде мати відступ на 4 символи пробілу, а також буде додано новий рядок на початку.
replace
Виконує просту заміну рядків.
Вона приймає три аргументи:
- рядок для заміни
- рядок, на який замінювати
- вихідний рядок
"I Am Henry VIII" | replace " " "-"
У результаті отримаємо I-Am-Henry-VIII.
plural
Форма множини.
len $fish | plural "one anchovy" "many anchovies"
У наведеному випадку, якщо довжина рядка дорівнює 1, буде надруковано перший аргумент (one anchovy). В іншому випадку буде надруковано другий аргумент (many anchovies).
Аргументи:
- однина
- множина
- довжина (ціле число)
ПРИМІТКА: Helm наразі не підтримує мови зі складнішими правилами множини. І 0 вважається множиною, оскільки англійська мова ставиться до нього саме так (zero anchovies).
snakecase
Перетворює рядок з camelCase в snake_case.
snakecase "FirstName"
У результаті отримаємо first_name.
camelcase
Перетворює рядок з snake_case в CamelCase.
camelcase "http_server"
У результаті отримаємо HttpServer.
kebabcase
Перетворює рядок з camelCase в kebab-case.
kebabcase "FirstName"
У результаті отримаємо first-name.
swapcase
Змінює регістр рядка за допомогою алгоритму на основі слів.
Алгоритм перетворення:
- Символи у верхньому регістрі перетворюються у нижній регістр
- Символи в титульному регістрі перетворюються у нижній регістр
- Символи у нижньому регістрі після пробілу або на початку перетворюються у титульний регістр
- Інші символи у нижньому регістрі перетворюються у верхній регістр
- Пробіли визначаються як unicode.IsSpace(char)
swapcase "This Is A.Test"
У результаті отримаємо tHIS iS a.tEST.
shuffle
Перемішує рядок.
shuffle "hello"
У результаті отримаємо випадковий порядок літер у hello, можливо, oelhl.
Функції перетворення типів
Helm пропонує такі функції для перетворення типів:
atoi: Перетворює рядок на ціле число.float64: Перетворює наfloat64.int: Перетворює наintвідповідно до ширини системи.int64: Перетворює наint64.toDecimal: Перетворює unix octal наint64.toString: Перетворює на рядок.toStrings: Перетворює список, зріз або масив на список рядків.toJson(mustToJson): Перетворює список, зріз, масив, словник або обʼєкт на JSON.toPrettyJson(mustToPrettyJson): Перетворює список, зріз, масив, словник або обʼєкт на форматований JSON.toRawJson(mustToRawJson): Перетворює список, зріз, масив, словник або обʼєкт на JSON з неекранованими HTML символами.fromYaml: Перетворює YAML рядок на обʼєкт.fromJson: Перетворює JSON рядок на обʼєкт.fromJsonArray: Перетворює JSON масив на список.toYaml: Перетворює список, зріз, масив, словник або обʼєкт на відформатований YAML.toToml: Перетворює список, зріз, масив, словник або обʼєкт на TOML.fromYamlArray: Перетворює YAML масив на список.
toStrings
Перетворює колекцію схожу на список на зріз рядків.
list 1 2 3 | toStrings
Перетворює 1 на "1", 2 на "2" і так далі, а потім повертає їх як список.
toDecimal
Перетворює unix octal на десятковий формат.
"0777" | toDecimal
Перетворює 0777 на 511 і повертає значення як int64.
toJson, mustToJson
Функція toJson кодує елемент у JSON рядок. Якщо елемент не може бути перетворений на JSON, функція поверне порожній рядок. mustToJson поверне помилку, якщо елемент не може бути закодований в JSON.
toJson .Item
Поверне JSON рядкове представлення .Item.
toPrettyJson, mustToPrettyJson
Функція toPrettyJson кодує елемент у форматований (з відступами) JSON рядок.
toPrettyJson .Item
Поверне відформатоване JSON рядкове представлення .Item.
toRawJson, mustToRawJson
Функція toRawJson кодує елемент у JSON рядок з неекранованими HTML символами.
toRawJson .Item
Поверне неекрановане JSON рядкове представлення .Item.
fromYaml
Функція fromYaml приймає YAML рядок і повертає обʼєкт, який можна використовувати в шаблонах.
Файл 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
Функція fromJson приймає JSON рядок і повертає обʼєкт, який можна використовувати в шаблонах.
Файл 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
Функція fromJsonArray приймає JSON масив і повертає список, який можна використовувати в шаблонах.
Файл 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 }}
fromYamlArray
Функція fromYamlArray приймає YAML масив і повертає список, який можна використовувати в шаблонах.
Файл 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 }}
Регулярні Вирази
Helm включає такі функції для роботи з регулярними виразами: regexMatch, regexFindAll, regexFind, regexReplaceAll, regexReplaceAllLiteral, regexSplit.
regexMatch, mustRegexMatch
Повертає true, якщо вхідний рядок містить хоча б один збіг для регулярного виразу.
regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com"
Поверне true.
regexMatch викликає паніку у разі проблеми, а mustRegexMatch поверне помилку у рушії шаблонів у разі проблеми.
regexFindAll, mustRegexFindAll
Повертає зріз усіх збігів регулярного виразу у вхідному рядку. Останній параметр n визначає кількість підрядків для повернення, де -1 означає повернути всі збіги.
regexFindAll "[2,4,6,8]" "123456789" -1
Поверне [2 4 6 8].
regexFindAll викликає паніку у разі проблеми, а mustRegexFindAll поверне помилку у рушії шаблонів у разі проблеми.
regexFind, mustRegexFind
Повертає перший (зліва) збіг регулярного виразу у вхідному рядку.
regexFind "[a-zA-Z][1-9]" "abcd1234"
Поверне d1.
regexFind викликає паніку у разі проблеми, а mustRegexFind поверне помилку у рушії шаблонів у разі проблеми.
regexReplaceAll, mustRegexReplaceAll
Повертає копію вхідного рядка, замінюючи збіг регулярного виразу на рядок заміни replacement. У рядку заміни знаки $ інтерпретуються як в Expand, тому, наприклад, $1 представляє текст першого збігу.
regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"
Поверне -W-xxW-.
regexReplaceAll викликає паніку у разі проблеми, а mustRegexReplaceAll поверне помилку у рушії шаблонів у разі проблеми.
regexReplaceAllLiteral, mustRegexReplaceAllLiteral
Повертає копію вхідного рядка, замінюючи збіг регулярного виразу на рядок заміни replacement. Рядок заміни підставляється без використання Expand.
regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"
Поверне -${1}-${1}-.
regexReplaceAllLiteral викликає паніку у разі проблеми, а mustRegexReplaceAllLiteral поверне помилку у рушії шаблонів у разі проблеми.
regexSplit, mustRegexSplit
Розбиває вхідний рядок на підрядки, розділені виразом, і повертає зріз підрядків між збігами цього виразу. Останній параметр n визначає кількість підрядків для повернення, де -1 означає повернути всі збіги.
regexSplit "z+" "pizza" -1
Поверне [pi a].
regexSplit викликає паніку у разі проблеми, а mustRegexSplit поверне помилку у рушії шаблонів у разі проблеми.
Функції криптографії та безпеки
Helm надає декілька розширених криптографічних функцій, серед яких: adler32sum, buildCustomCert, decryptAES, derivePassword, encryptAES, genCA, genPrivateKey, genSelfSignedCert, genSignedCert, htpasswd, sha1sum, та sha256sum.
sha1sum
Функція sha1sum отримує рядок і обчислює його SHA1-дайджест.
sha1sum "Hello world!"
sha256sum
Функція sha256sum отримує рядок і обчислює його SHA256-дайджест.
sha256sum "Hello world!"
Це обчислює SHA 256 контрольну суму у форматі "ASCII armored", який є безпечним для друку.
adler32sum
Функція adler32sum отримує рядок і обчислює його контрольну суму Adler-32.
adler32sum "Hello world!"
htpasswd
Функція htpasswd приймає username і password та генерує bcrypt хеш паролю. Результат може бути використаний для базової автентифікації на Apache HTTP Server.
htpasswd "myUser" "myPassword"
Зверніть увагу, що небезпечно зберігати пароль безпосередньо в шаблоні.
derivePassword
Функція derivePassword може бути використана для виведення певного пароля на основі деяких спільних "основних" обмежень пароля. Алгоритм для цього добре описаний.
derivePassword 1 "long" "password" "user" "example.com"
Зверніть увагу, що небезпечно зберігати частини безпосередньо в шаблоні.
genPrivateKey
Функція genPrivateKey генерує новий приватний ключ, закодований у PEM-блок.
Вона приймає одне з наступних значень для свого першого параметра:
ecdsa: Генерує ключ еліптичної кривої DSA (P256)dsa: Генерує DSA ключ (L2048N256)rsa: Генерує RSA 4096 ключ
buildCustomCert
Функція buildCustomCert дозволяє налаштувати сертифікат.
Вона приймає наступні строкові параметри:
- Сертифікат у форматі PEM, закодований у base64
- Приватний ключ у форматі PEM, закодований у base64
Функція повертає обʼєкт сертифіката з наступними атрибутами:
Cert: Сертифікат у форматі PEMKey: Приватний ключ у форматі PEM
Приклад:
$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"
Зверніть увагу, що повернутий обʼєкт може бути переданий до функції genSignedCert для підписання сертифіката за допомогою цього CA.
genCA
Функція genCA генерує новий самопідписний сертифікат x509 для центру сертифікацї.
Вона приймає наступні параметри:
- Загальне імʼя субʼєкта (cn)
- Термін дії сертифіката у днях
Функція повертає обʼєкт з наступними атрибутами:
Cert: Сертифікат у форматі PEMKey: Приватний ключ у форматі PEM
Приклад:
$ca := genCA "foo-ca" 365
Зверніть увагу, що повернутий обʼєкт може бути переданий до функції genSignedCert для підписання сертифіката за допомогою цього CA.
genSelfSignedCert
Функція genSelfSignedCert генерує новий самопідписаний сертифікат x509.
Вона приймає наступні параметри:
- Загальне імʼя субʼєкта (cn)
- Необовʼязковий список IP-адрес; може бути nil
- Необовʼязковий список альтернативних DNS-імен; може бути nil
- Термін дії сертифіката у днях
Функція повертає обʼєкт з наступними атрибутами:
Cert: Сертифікат у форматі PEMKey: Приватний ключ у форматі PEM
Приклад:
$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365
genSignedCert
Функція genSignedCert генерує новий сертифікат x509, підписаний зазначеним CA.
Вона приймає наступні параметри:
- Спільне імʼя субʼєкта (cn)
- Необовʼязковий список IP-адрес; може бути nil
- Необовʼязковий список альтернативних DNS-імен; може бути nil
- Термін дії сертифіката у днях
- CA (див.
genCA)
Приклад:
$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
Функція encryptAES шифрує текст за допомогою AES-256 CBC і повертає рядок, закодований у base64.
encryptAES "secretkey" "plaintext"
decryptAES
Функція decryptAES отримує рядок у форматі base64, закодований за допомогою алгоритму AES-256 CBC, і повертає розкодований текст.
"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"
Функції дати
Helm включає наступні функції дати, які ви можете використовувати в шаблонах: ago, date, dateInZone, dateModify (mustDateModify), duration, durationRound, htmlDate, htmlDateInZone, now, toDate (mustToDate) та unixEpoch.
now
Поточна дата/час. Використовуйте це разом з іншими функціями дати.
ago
Функція ago повертає тривалість від часу. Зараз у секундах.
ago .CreatedAt
повертає у форматі time.Duration String()
2h34m7s
date
Функція date форматує дату.
Формат дати до РІК-МІСЯЦЬ-ДЕНЬ:
now | date "2006-01-02"
Форматування дати в Go дещо відрізняється.
Коротко, візьміть цю базову дату:
Mon Jan 2 15:04:05 MST 2006
Запишіть її у потрібному форматі. Вище, 2006-01-02 — це та ж дата, але в потрібному форматі.
dateInZone
Те ж саме, що і date, але з часовою зоною.
dateInZone "2006-01-02" (now) "UTC"
duration
Форматує задану кількість секунд як time.Duration.
Це повертає 1m35s
duration "95"
durationRound
Округлює задану тривалість до найзначнішої одиниці. Рядки та time.Duration аналізуються як тривалість, тоді як time.Time обчислюється як тривалість з моменту.
Це повертає 2h
durationRound "2h10m5s"
Це повертає 3mo
durationRound "2400h10m5s"
unixEpoch
Повертає кількість секунд з unix-епохи для time.Time.
now | unixEpoch
dateModify, mustDateModify
Функція dateModify приймає модифікацію та дату і повертає часову мітку.
Відніміть годину і тридцять хвилин від поточного часу:
now | dateModify "-1.5h"
Якщо формат модифікації неправильний, dateModify поверне дату немодифікованою. mustDateModify поверне помилку в іншому випадку.
htmlDate
Функція htmlDate форматує дату для вставки в поле введення дати в HTML.
now | htmlDate
htmlDateInZone
Те ж саме, що і htmlDate, але з часовою зоною.
htmlDateInZone (now) "UTC"
toDate, mustToDate
Функція toDate перетворює рядок у дату. Перший аргумент — це макет дати, а другий — рядок дати. Якщо рядок не можна перетворити, він поверне нульове значення. mustToDate поверне помилку в разі, якщо рядок не можна перетворити.
Це корисно, коли ви хочете перетворити дату-рядок в інший формат (використовуючи конвеєр). Нижче наведений приклад перетворює "2017-12-31" на "31/12/2017".
toDate "2006-01-02" "2017-12-31" | date "02/01/2006"
Словники та функції словників
Helm надає тип зберігання ключ/значення, який називається dict (скорочено від "dictionary" ["словник"], як у Python). dict є невпорядкованим типом.
Ключ у словнику має бути рядком. Однак значення може бути будь-якого типу, навіть іншим dict або list.
На відміну від list, dict не є незмінним. Функції set та unset змінюють вміст словника.
Helm надає такі функції для роботи зі словниками: deepCopy (mustDeepCopy), dict, dig, get, hasKey, keys, merge (mustMerge), mergeOverwrite (mustMergeOverwrite), omit, pick, pluck, set, unset та values.
dict
Створення словників здійснюється шляхом виклику функції dict і передачі їй списку пар.
Наступний приклад створює словник з трьома елементами:
$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"
get
За наявності map і ключа отримає значення з map.
get $myDict "name1"
Наведений вище приклад поверне "value1".
Зверніть увагу, що якщо ключ не знайдено, ця операція просто поверне "". Помилка не буде згенерована.
set
Використовуйте set, щоб додати нову пару ключ/значення до словника.
$_ := set $myDict "name4" "value4"
Зверніть увагу, що set повертає словник (вимога функцій шаблону Go), тому вам може знадобитися захопити значення, як це зроблено вище за допомогою присвоєння $_.
unset
За наявності map і ключа видалить ключ з map.
$_ := unset $myDict "name4"
Як і у випадку з set, це повертає словник.
Зверніть увагу, що якщо ключ не знайдено, ця операція просто повернеться. Помилка не буде згенерована.
hasKey
Функція hasKey повертає true, якщо даний словник містить даний ключ.
hasKey $myDict "name1"
Якщо ключ не знайдено, це повертає false.
pluck
Функція pluck дозволяє вказати один ключ і кілька map, і отримати список усіх знайдених збігів:
pluck "name1" $myDict $myOtherDict
Наведений вище приклад поверне list, що містить усі знайдені значення ([value1 otherValue1]).
Якщо даний ключ не знайдено в map, цей map не буде мати елемента у списку (і довжина повернутого списку буде меншою, ніж кількість словників у виклику pluck).
Якщо ключ знайдено, але значення є порожнім, це значення буде вставлено.
Поширеною ідіомою у шаблонах Helm є використання pluck... | first, щоб отримати перший відповідний ключ із колекції словників.
dig
Функція dig проходить через вкладені набори словників, вибираючи ключі зі списку значень. Вона повертає стандартне значення, якщо будь-який з ключів не знайдено в асоційованому словнику.
dig "user" "role" "humanName" "guest" $dict
За наявності словника, структурованого таким чином:
{
user: {
role: {
humanName: "curator"
}
}
}
наведений вище приклад поверне "curator". Якщо у словнику навіть не було поля user, результатом буде "guest".
dig може бути дуже корисним у випадках, коли ви хочете уникнути охоронних конструкцій, особливо тому, що and у пакеті шаблонів Go не є скороченим. Наприклад, and a.maybeNil a.maybeNil.iNeedThis завжди буде оцінювати a.maybeNil.iNeedThis і викличе паніку, якщо у a відсутнє поле maybeNil.
dig приймає свій аргумент словника останнім, щоб підтримувати конвеєрну обробку. Наприклад:
merge a b c | dig "one" "two" "three" "<missing>"
merge, mustMerge
Обʼєднує два або більше словників в один, надаючи перевагу словнику призначення:
Наприклад:
dst:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
результатом буде:
newdict:
default: default
overwrite: me
key: true
$newdict := merge $dest $source1 $source2
Це операція глибокого обʼєднання, але не глибокого копіювання. Вкладені обʼєкти, що обʼєднуються, є однією і тією ж сутністю в обох словниках. Якщо ви хочете глибоке копіювання разом з обʼєднанням, то використовуйте функцію deepCopy разом з обʼєднанням. Наприклад,
deepCopy $source | merge $dest
mustMerge поверне помилку в разі невдалого обʼєднання.
mergeOverwrite, mustMergeOverwrite
Обʼєднує два або більше словників в один, надаючи перевагу з права наліво, ефективно перезаписуючи значення в словнику призначення:
Наприклад:
dst:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
результатом буде:
newdict:
default: default
overwrite: overwritten
key: false
$newdict := mergeOverwrite $dest $source1 $source2
Це операція глибокого обʼєднання, але не глибокого копіювання. Вкладені обʼєкти, що обʼєднуються, є однією і тією ж сутністю в обох словниках. Якщо ви хочете глибоке копіювання разом з обʼєднанням, то використовуйте функцію deepCopy разом з обʼєднанням. Наприклад,
deepCopy $source | mergeOverwrite $dest
mustMergeOverwrite поверне помилку в разі невдалого обʼєднання.
keys
Функція keys повертає list усіх ключів одного або декількох типів dict. Оскільки словник є невпорядкованим, ключі не будуть у передбачуваному порядку. Їх можна відсортувати за допомогою sortAlpha.
keys $myDict | sortAlpha
При поданні кількох словників ключі будуть обʼєднані. Використовуйте функцію uniq разом із sortAlpha, щоб отримати унікальний, відсортований список ключів.
keys $myDict $myOtherDict | uniq | sortAlpha
pick
Функція pick вибирає тільки зазначені ключі зі словника, створюючи новий dict.
$new := pick $myDict "name1" "name2"
Наведений вище приклад поверне {name1: value1, name2: value2}.
omit
Функція omit схожа на pick, за винятком того, що вона повертає новий dict з усіма ключами, які не збігаються з даними ключами.
$new := omit $myDict "name1" "name3"
Наведений вище приклад поверне {name2: value2}.
values
Функція values схожа на keys, за винятком того, що вона повертає новий list з усіма значеннями вихідного dict (підтримується тільки один словник).
$vals := values $myDict
Наведений вище приклад поверне list["value1", "value2", "value 3"]. Зверніть увагу, що функція values не дає жодних гарантій щодо порядку результатів; якщо це важливо, використовуйте sortAlpha.
deepCopy, mustDeepCopy
Функції deepCopy і mustDeepCopy приймають значення і роблять глибоку копію цього значення. Це включає словники та інші структури. deepCopy викликає паніку, коли виникає проблема, тоді як mustDeepCopy повертає помилку системі шаблонів, коли виникає помилка.
dict "a" 1 "b" 2 | deepCopy
Примітка про внутрішню структуру Dict
dict реалізовано в Go як map[string]interface{}. Розробники Go можуть передавати значення map[string]interface{} у контекст, щоб зробити їх доступними для шаблонів як dict.
Функції кодування
Helm має такі функції для кодування та декодування:
b64enc/b64dec: Кодування або декодування з використанням Base64b32enc/b32dec: Кодування або декодування з використанням Base32
Списки та функції для роботи зі списками
Helm надає простий тип list, який може містити довільні послідовні дані. Це схоже на масиви або зрізи, але списки призначені для використання як незмінні типи даних.
Створення списку цілих чисел:
$myList := list 1 2 3 4 5
Це створить список [1 2 3 4 5].
Helm надає наступні функції для роботи зі списками: append (mustAppend), 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 та without (mustWithout).
first, mustFirst
Щоб отримати перший елемент списку, використовуйте first.
first $myList повертає 1.
first викликає panic у разі проблеми, тоді як mustFirst повертає помилку в рушій шаблонів, якщо виникає проблема.
rest, mustRest
Щоб отримати залишок списку (все, окрім першого елемента), використовуйте rest.
rest $myList повертає [2 3 4 5].
rest викликає panic у разі проблеми, тоді як mustRest повертає помилку в рушій шаблонів, якщо виникає проблема.
last, mustLast
Щоб отримати останній елемент списку, використовуйте last:
last $myList повертає 5. Це аналогічно до реверсування списку та виклику first.
initial, mustInitial
Ця функція доповнює last, повертаючи всі елементи, окрім останнього. initial $myList повертає [1 2 3 4].
initial викликає panic у разі проблеми, тоді як mustInitial повертає помилку в рушій шаблонів, якщо виникає проблема.
append, mustAppend
Додає новий елемент до існуючого списку, створюючи новий список.
$new = append $myList 6
Це встановлює $new до [1 2 3 4 5 6]. $myList залишається незмінним.
append викликає panic у разі проблеми, тоді як mustAppend повертає помилку в рушій шаблонів, якщо виникає проблема.
prepend, mustPrepend
Додає елемент на початок списку, створюючи новий список.
prepend $myList 0
Це створить [0 1 2 3 4 5]. $myList залишається незмінним.
prepend викликає panic у разі проблеми, тоді як mustPrepend повертає помилку в рушій шаблонів, якщо виникає проблема.
concat
Обʼєднує довільну кількість списків в один.
concat $myList (list 6 7) (list 8)
Це створить [1 2 3 4 5 6 7 8]. $myList залишається незмінним.
reverse, mustReverse
Створює новий список з елементами у зворотному порядку.
reverse $myList
Це генерує список [5 4 3 2 1].
reverse викликає panic у разі проблеми, тоді як mustReverse повертає помилку в рушій шаблонів, якщо виникає проблема.
uniq, mustUniq
Створює список без дублікатів.
list 1 1 1 2 | uniq
Це створить [1 2].
uniq викликає panic у разі проблеми, тоді як mustUniq повертає помилку в рушій шаблонів, якщо виникає проблема.
without, mustWithout
Функція without видаляє елементи зі списку.
without $myList 3
Це створить [1 2 4 5].
without може приймати більше одного фільтра:
without $myList 1 3 5
Це створить [2 4].
without викликає panic у разі проблеми, тоді як mustWithout повертає помилку в рушій шаблонів, якщо виникає проблема.
has, mustHas
Перевіряє, чи містить список певний елемент.
has 4 $myList
Це поверне true, а has "hello" $myList поверне false.
has викликає panic у разі проблеми, тоді як mustHas повертає помилку в рушій шаблонів, якщо виникає проблема.
compact, mustCompact
Приймає список та видаляє елементи з пустими значеннями.
$list := list 1 "a" "foo" ""
$copy := compact $list
compact поверне новий список з видаленим пустим (тобто "") елементом.
compact викликає panic у разі проблеми, тоді як mustCompact повертає помилку в рушій шаблонів, якщо виникає проблема.
index
Щоб отримати n-й елемент списку, використовуйте index list [n]. Щоб отримати
елемент у багатовимірних списках, використовуйте index list [n] [m] ....
index $myList 0повертає1. Це те саме, що іmyList[0].index $myList 0 1повертає той самий результат, що іmyList[0][1].
slice, mustSlice
Щоб отримати часткові елементи списку, використовуйте slice list [n] [m]. Це еквівалентно до list[n:m].
slice $myListповертає[1 2 3 4 5]. Це те саме, що іmyList[:].slice $myList 3повертає[4 5]. Це те саме, що іmyList[3:].slice $myList 1 3повертає[2 3]. Це те саме, що іmyList[1:3].slice $myList 0 3повертає[1 2 3]. Це те саме, що іmyList[:3].
slice викликає panic у разі проблеми, тоді як mustSlice повертає помилку в рушій шаблонів, якщо виникає проблема.
until
Функція until створює діапазон цілих чисел.
until 5
Це генерує список [0, 1, 2, 3, 4].
Це корисно для циклів з range $i, $e := until 5.
untilStep
Як і until, функція untilStep створює список рахуючих цілих чисел. Але вона дозволяє визначити початок, кінець та крок:
untilStep 3 6 2
Це створить [3 5], починаючи з 3 та додаючи 2, поки не буде досягнуто або перевищено 6. Це схоже на функцію range в Python.
seq
Працює як команда seq у bash.
- 1 параметр (end) — генерує всі рахуючі цілі числа між 1 та
endвключно. - 2 параметри (start, end) — генерує всі рахуючі цілі числа між
startтаendвключно, збільшуючи або зменшуючи на 1. - 3 параметри (start, step, end) — генерує всі рахуючі цілі числа між
startтаendвключно, збільшуючи або зменшуючи наstep.
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
Математичні функції
Усі математичні функції працюють із значеннями типу int64, якщо не зазначено інше.
Доступні наступні математичні функції: add, add1, ceil, div, floor, len, max, min, mod, mul, round та sub.
add
Додавайте числа за допомогою add. Приймає два або більше аргументів.
add 1 2 3
add1
Щоб збільшити на 1, використовуйте add1.
sub
Щоб відняти, використовуйте sub.
div
Виконуйте цілочисельне ділення за допомогою div.
mod
Залишок від ділення можна отримати за допомогою mod.
mul
Множте за допомогою mul. Приймає два або більше аргументів.
mul 1 2 3
max
Повертає найбільше із серії цілих чисел.
Це поверне 3:
max 1 2 3
min
Повертає найменше із серії цілих чисел.
min 1 2 3 поверне 1.
len
Повертає довжину аргументу у вигляді цілого числа.
len .Arg
Математичні функції з плаваючою комою
Усі математичні функції працюють із значеннями типу float64.
addf
Додавайте числа за допомогою addf.
Це поверне 5.5:
addf 1.5 2 2
add1f
Щоб збільшити на 1, використовуйте add1f.
subf
Щоб відняти, використовуйте subf.
Це еквівалентно 7.5 - 2 - 3 і поверне 2.5:
subf 7.5 2 3
divf
Виконуйте ділення з плаваючою комою за допомогою divf.
Це еквівалентно 10 / 2 / 4 і поверне 1.25:
divf 10 2 4
mulf
Множте за допомогою mulf.
Це поверне 6:
mulf 1.5 2 2
maxf
Повертає найбільше із серії чисел з плаваючою комою:
Це поверне 3:
maxf 1 2.5 3
minf
Повертає найменше із серії чисел з плаваючою комою.
Це поверне 1.5:
minf 1.5 2 3
floor
Повертає найбільше число з плаваючою комою, яке менше або рівне вхідному значенню.
floor 123.9999 поверне 123.0.
ceil
Повертає найбільше число з плаваючою комою, яке більше або рівне вхідному значенню.
ceil 123.001 поверне 124.0.
round
Повертає число з плаваючою комою з округленим залишком до зазначеної кількості цифр після десяткової крапки.
round 123.555555 3 поверне 123.556.
Мережеві функції
Helm має одну мережеву функцію, getHostByName.
Функція getHostByName приймає доменне імʼя і повертає IP-адресу.
getHostByName "www.google.com" поверне відповідну IP-адресу для www.google.com.
Функції роботи з шляхами до файлів
Хоча функції шаблонів Helm не надають доступ до файлової системи, вони забезпечують функції для роботи з рядками, які відповідають конвенціям шляхів до файлів. До них відносяться base, clean, dir, ext та isAbs.
base
Повертає останній елемент шляху.
base "foo/bar/baz"
Вищезазначене поверне "baz".
dir
Повертає теку, видаляючи останню частину шляху. Отже, dir "foo/bar/baz" повертає foo/bar.
clean
Очищує шлях.
clean "foo/bar/../baz"
Вищезазначене знаходить .. і повертає foo/baz.
ext
Повертає розширення файлу.
ext "foo.bar"
Вищезазначене поверне .bar.
isAbs
Щоб перевірити, чи є шлях до файлу абсолютним, використовуйте isAbs.
Функції аналізу
Helm надає базові інструменти аналізу. Це допомагає розробникам шаблонів зрозуміти основну інформацію про типи Go для конкретного значення. Helm написано на Go і він має строгий типізований підхід. Система типів застосовується всередині шаблонів.
Go має кілька примітивів видів (kind), таких як string, slice, int64 і bool.
Go має відкриту систему типів, яка дозволяє розробникам створювати власні типи.
Helm надає набір функцій для кожного з них через функції kind і функції type. Також надана функція deepEqual для порівняння значень.
Функції kind
Є дві функції видів: kindOf повертає вид обʼєкта.
kindOf "hello"
Вищезазначене поверне string. Для простих тестів (наприклад, у блоці if), функція kindIs дозволяє перевірити, що значення має певний вид:
kindIs "int" 123
Вищезазначене поверне true.
Функції type
Типи трохи складніше обробляти, тому є три різні функції:
typeOfповертає основний тип значення:typeOf $footypeIsподібна доkindIs, але для типів:typeIs "*io.Buffer" $myValtypeIsLikeпрацює якtypeIs, але також розіменовує покажчики
Примітка: Жодна з цих функцій не може перевірити, чи реалізує щось певний інтерфейс, оскільки це вимагало б компіляції інтерфейсу заздалегідь.
deepEqual
deepEqual повертає true, якщо два значення є "глибоко рівними".
Працює і для типів непримітивів (в порівнянні з вбудованим eq).
deepEqual (list 1 2 3) (list 1 2 3)
Вищезазначене поверне true.
Функції семантичного версіонування
Деякі схеми версій легко розпізнати та порівнювати. Helm надає функції для роботи з версіями SemVer 2. До них відносяться semver і semverCompare. Нижче ви також знайдете деталі про використання діапазонів для порівнянь.
semver
Функція semver розбирає рядок у семантичну версію:
$version := semver "1.2.3-alpha.1+123"
Якщо синтаксичний аналізатор не спрацює, виконання шаблону буде зупинено з помилкою.
На цьому етапі $version є покажчиком на обʼєкт Version з наступними властивостями:
$version.Major: Основний номер (1вище)$version.Minor: Мінорний номер (2вище)$version.Patch: Номер патчу (3вище)$version.Prerelease: Пре-реліз (alpha.1вище)$version.Metadata: Метадані збірки (123вище)$version.Original: Оригінальна версія у вигляді рядка
Крім того, ви можете порівнювати Version з іншою версією, використовуючи функцію Compare:
semver "1.4.3" | (semver "1.2.3").Compare
Вищезазначене поверне -1.
Значення повернення такі:
-1, якщо дана версія SemVer більша за версію, методCompareякої був викликаний1, якщо версія, для якої була викликана функціяCompare, більша0, якщо версії однакові
(Зверніть увагу, що в SemVer поле Metadata не порівнюється під час операцій порівняння версій.)
semverCompare
Більш надійна функція порівняння надається як semverCompare. Ця версія підтримує діапазони версій:
semverCompare "1.2.3" "1.2.3"перевіряє на точний збігsemverCompare "~1.2.0" "1.2.3"перевіряє, що основні та мінорні версії збігаються, і що номер патчу другої версії більший або рівний першому параметру.
Функції SemVer використовують бібліотеку Masterminds semver, від творців Sprig.
Основні порівняння
Є два елементи порівнянь. По-перше, рядок порівняння є списком порівнянь з AND, розділених пробілом або комою. Ці порівняння потім розділяються операцією || (OR). Наприклад, ">= 1.2 < 3.0.0 || >= 4.2.3" шукає порівняння, яке більше або дорівнює 1.2 і менше 3.0.0 або більше або дорівнює 4.2.3.
Основні порівняння:
=: рівно (аналогічно відсутності оператора)!=: не рівно>: більше ніж<: менше ніж>=: більше або рівно<=: менше або рівно
Робота з версіями пре-релізів
Пре-релізи, для тих, хто не знайомий з ними, використовуються для випусків програмного забезпечення до стабільних або загальнодоступних випусків. Прикладами пре-релізів є розробка, альфа, бета та реліз-кандидат. Пре-реліз може бути версією, наприклад, 1.2.3-beta.1, в той час як стабільний реліз буде 1.2.3. За порядком пріоритету пре-релізи йдуть перед їх повʼязаними релізами. У цьому прикладі 1.2.3-beta.1 < 1.2.3.
Згідно з специфікацією Semantic Version, пре-релізи можуть не відповідати API сумісності зі своїм релізом. Вона говорить,
Версія пре-релізу вказує, що версія нестабільна і може не відповідати запланованим вимогам сумісності, як зазначено у відповідній нормальній версії.
Порівняння SemVer з використанням обмежень без компаратора пре-релізу пропустять пре-релізи. Наприклад, >=1.2.3 пропустить пре-релізи при перегляді списку релізів, тоді як >=1.2.3-0 буде оцінювати і знаходити пре-релізи.
Причина для 0 як версії пре-релізу у прикладі порівняння полягає в тому, що пре-релізи можуть містити лише ASCII числа, літери та дефіси (разом з роздільниками .), згідно з специфікацією. Сортування відбувається в ASCII порядку сортування, згідно з специфікацією. Найнижчий символ — це 0 в ASCII порядку сортування (див. ASCII Таблицю).
Розуміння ASCII порядку сортування важливе, оскільки A-Z йде перед a-z. Це означає, що >=1.2.3-BETA поверне 1.2.3-alpha. Те, що ви могли б очікувати від чутливості до регістру, тут не застосовується. Це через ASCII порядок сортування, який зазначено у специфікації.
Порівняння діапазонів з дефісами
Є кілька методів обробки діапазонів, і перший — діапазони з дефісами. Вони виглядають так:
1.2 - 1.4.5, що еквівалентно>= 1.2 <= 1.4.52.3.4 - 4.5, що еквівалентно>= 2.3.4 <= 4.5
Підстановочні символи в порівняннях
Символи x, X та * можуть використовуватися як символи заміщення. Це працює для всіх операторів порівняння. Коли використовується з оператором =, він переходить до порівняння рівня патчу (див. тильду нижче). Наприклад,
1.2.xеквівалентно>= 1.2.0, < 1.3.0>= 1.2.xеквівалентно>= 1.2.0<= 2.xеквівалентно< 3*еквівалентно>= 0.0.0
Порівняння діапазонів з тильдою (patch)
Оператор порівняння тильди (~) використовується для діапазонів рівня патчу, коли вказана мінорна версія, і для змін на рівні основної версії, коли мінорний номер відсутній. Наприклад,
~1.2.3еквівалентно>= 1.2.3, < 1.3.0~1еквівалентно>= 1, < 2~2.3еквівалентно>= 2.3, < 2.4~1.2.xеквівалентно>= 1.2.0, < 1.3.0~1.xеквівалентно>= 1, < 2
Порівняння діапазонів з кареткою (major)
Оператор порівняння каретки (^) використовується для змін на рівні основної версії після випуску стабільної (1.0.0) версії. До випуску 1.0.0 мінорні версії діють як рівень стабільності API. Це корисно при порівнянні версій API, оскільки велика зміна є порушенням API. Наприклад,
^1.2.3еквівалентно>= 1.2.3, < 2.0.0^1.2.xеквівалентно>= 1.2.0, < 2.0.0^2.3еквівалентно>= 2.3, < 3^2.xеквівалентно>= 2.0.0, < 3^0.2.3еквівалентно>=0.2.3 <0.3.0^0.2еквівалентно>=0.2.0 <0.3.0^0.0.3еквівалентно>=0.0.3 <0.0.4^0.0еквівалентно>=0.0.0 <0.1.0^0еквівалентно>=0.0.0 <1.0.0
Функції URL
Helm включає функції urlParse, urlJoin і urlquery, які дозволяють працювати з частинами URL.
urlParse
Розбирає рядок для URL і створює словник з частинами URL
urlParse "http://admin:secret@server.com:8080/api?list=false#anchor"
Вищезазначене повертає словник, що містить обʼєкт URL:
scheme: 'http'
host: 'server.com:8080'
path: '/api'
query: 'list=false'
opaque: nil
fragment: 'anchor'
userinfo: 'admin:secret'
Це реалізовано за допомогою пакетів URL з стандартної бібліотеки Go. Для отримання додаткової інформації перевірте https://golang.org/pkg/net/url/#URL
urlJoin
Обʼєднує словник (створений за допомогою urlParse) для створення рядка URL
urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http")
Вищезазначене поверне наступний рядок:
http://host:80/path?query#fragment
urlquery
Повертає екрановану версію значення, переданого як аргумент, так що воно підходить для вбудовування в частину запиту URL.
$var := urlquery "string for query"
Функції UUID
Helm може генерувати UUID v4, унікальні ідентифікатори.
uuidv4
Вищезазначене повертає новий UUID типу v4 (згенерований випадковим чином).
Функції Kubernetes і Chart
Helm включає функції для роботи з Kubernetes, зокрема .Capabilities.APIVersions.Has, Files та lookup.
lookup
lookup використовується для пошуку ресурсу в працюючому кластері. При використанні з командою helm template він завжди повертає порожній результат.
Більше деталей можна знайти в документації по функції lookup.
.Capabilities.APIVersions.Has
Повертає, чи доступна API-версія або ресурс у кластері.
.Capabilities.APIVersions.Has "apps/v1"
.Capabilities.APIVersions.Has "apps/v1/Deployment"
Більше інформації доступно в документації по вбудованих обʼєктах.
Функції файлів
Є кілька функцій, які дозволяють отримати доступ до не-спеціальних файлів всередині chart. Наприклад, для доступу до конфігураційних файлів програми. Ці функції документовані в Доступ до файлів всередині шаблонів.
Зверніть увагу, що документація для багатьох з цих функцій надходить з Sprig. Sprig — це бібліотека функцій шаблонів, доступна для застосунків на Go.