Список функцій шаблонів
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 "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%U
Unicode формат: 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-Z
randAlpha
використовуєa-zA-Z
randNumeric
використовує0-9
randAscii
використовує всі друковані 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 $foo
typeIs
подібна доkindIs
, але для типів:typeIs "*io.Buffer" $myVal
typeIsLike
працює як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.5
2.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.