Список функцій шаблонів

Helm містить багато функцій шаблонів, якими ви можете скористатися у шаблонах. Вони перераховані тут і розбиті на наступні категорії:

Логічні функції та функції керування потоком

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
  • %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: Сертифікат у форматі PEM
  • Key: Приватний ключ у форматі PEM

Приклад:

$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"

Зверніть увагу, що повернутий обʼєкт може бути переданий до функції genSignedCert для підписання сертифіката за допомогою цього CA.

genCA

Функція genCA генерує новий самопідписний сертифікат x509 для центру сертифікацї.

Вона приймає наступні параметри:

  • Загальне імʼя субʼєкта (cn)
  • Термін дії сертифіката у днях

Функція повертає обʼєкт з наступними атрибутами:

  • Cert: Сертифікат у форматі PEM
  • Key: Приватний ключ у форматі PEM

Приклад:

$ca := genCA "foo-ca" 365

Зверніть увагу, що повернутий обʼєкт може бути переданий до функції genSignedCert для підписання сертифіката за допомогою цього CA.

genSelfSignedCert

Функція genSelfSignedCert генерує новий самопідписаний сертифікат x509.

Вона приймає наступні параметри:

  • Загальне імʼя субʼєкта (cn)
  • Необовʼязковий список IP-адрес; може бути nil
  • Необовʼязковий список альтернативних DNS-імен; може бути nil
  • Термін дії сертифіката у днях

Функція повертає обʼєкт з наступними атрибутами:

  • Cert: Сертифікат у форматі PEM
  • Key: Приватний ключ у форматі 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: Кодування або декодування з використанням Base64
  • b32enc/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.