Вбудовані обʼєкти

Обʼєкти передаються в шаблон з рушія обробки шаблонів. І ваш код може передавати обʼєкти далі (ми побачимо приклади, коли розглянемо оператори with та range). Є навіть кілька способів створити нові обʼєкти всередині ваших шаблонів, як, наприклад, з функцією tuple, яку ми розглянемо пізніше.

Обʼєкти можуть бути простими та мати лише одне значення. Або вони можуть містити інші обʼєкти чи функції. Наприклад, обʼєкт Release містить кілька обʼєктів (наприклад, Release.Name), а обʼєкт Files має кілька функцій.

У попередньому розділі ми використовували {{ .Release.Name }}, щоб вставити імʼя релізу в шаблон. Release — один з обʼєктів верхнього рівня, до якого ви можете отримати доступ у своїх шаблонах.

  • Release: Цей обʼєкт описує сам реліз. Він містить кілька обʼєктів:
    • Release.Name: Імʼя релізу
    • Release.Namespace: Простір імен, у який буде здійснено реліз (якщо маніфест не перевизначить)
    • Release.IsUpgrade: Це значення буде true, якщо поточна операція є оновленням або відкатом.
    • Release.IsInstall: Це значення буде true, якщо поточна операція є встановленням.
    • Release.Revision: Номер ревізії для цього релізу. Під час встановлення це 1, і він збільшується з кожним оновленням або відкатом.
    • Release.Service: Сервіс, який обробляє поточний шаблон. У Helm це завжди Helm.
  • Values: Значення, передані в шаблон з файлу values.yaml і з файлів, наданих користувачем. Стандартно Values порожній.
  • Chart: Вміст файлу Chart.yaml. Будь-які дані в Chart.yaml будуть доступні тут. Наприклад, {{ .Chart.Name }}-{{ .Chart.Version }} виведе mychart-0.1.0.
  • Subcharts: Надає доступ до області дії (.Values, .Charts, .Releases тощо) субшаблонів з батьківського шаблону. Наприклад, .Subcharts.mySubChart.myValue, щоб отримати доступ до myValue у шаблоні mySubChart.
  • Files: Це надає доступ до всіх не-спеціальних файлів у шаблоні. Ви не можете використовувати його для доступу до шаблонів, але можете використовувати його для доступу до інших файлів у шаблоні. Див. розділ Доступ до файлів для отримання додаткової інформації.
    • Files.Get — це функція для отримання файлу за іменем (.Files.Get config.ini).
    • Files.GetBytes — це функція для отримання вмісту файлу у вигляді масиву байтів, а не рядка. Це корисно для таких речей, як образи.
    • Files.Glob — це функція, яка повертає список файлів, імена яких відповідають заданому шаблону оболонки.
    • Files.Lines — це функція, яка зчитує файл рядок за рядком. Це корисно для ітерації по кожному рядку у файлі.
    • Files.AsSecrets — це функція, яка повертає вміст файлів у вигляді Base64-кодованих рядків.
    • Files.AsConfig — це функція, яка повертає вміст файлів у вигляді YAML map.
  • Capabilities: Надає інформацію про можливості, які підтримує кластер Kubernetes.
    • Capabilities.APIVersions — це набір версій.
    • Capabilities.APIVersions.Has $version вказує на те, чи доступна версія (наприклад, batch/v1) або ресурс (наприклад, apps/v1/Deployment) у кластері.
    • Capabilities.KubeVersion і Capabilities.KubeVersion.Version — це версія Kubernetes.
    • Capabilities.KubeVersion.Major — це основна версія Kubernetes.
    • Capabilities.KubeVersion.Minor — це мінорна версія Kubernetes.
    • Capabilities.HelmVersion — це обʼєкт, який містить деталі версії Helm, це той самий вивід, що і helm version.
    • Capabilities.HelmVersion.Version — це поточна версія Helm у форматі semver.
    • Capabilities.HelmVersion.GitCommit — це Git-ідентифікатор SHA1 для Helm.
    • Capabilities.HelmVersion.GitTreeState — це стан дерева git для Helm.
    • Capabilities.HelmVersion.GoVersion — це версія компілятора Go, який використовувався.
  • Template: Містить інформацію про поточний шаблон, який виконується.
    • Template.Name: Іменований шлях до поточного шаблону (наприклад, mychart/templates/mytemplate.yaml).
    • Template.BasePath: Іменований шлях до теки шаблонів поточного шаблону (наприклад, mychart/templates).

Вбудовані значення завжди починаються з великої літери. Це відповідає угоді про найменування у Go. Коли ви створюєте власні імена, ви можете використовувати угоду, яка підходить вашій команді. Деякі команди, як і багато тих, чиї шаблони ви можете бачити на Artifact Hub, обирають використовувати лише початкові малі літери, щоб відрізнити локальні імена від вбудованих. У цьому посібнику ми дотримуємося цієї угоди.