Сохранение корневой точки внутри range
Используйте сохранённую ссылку на корень внутри циклов
«Сохранение корневой точки внутри range» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Точка может перемещаться
Внутри цикла range точка перестаёт означать корень чарта и вместо этого указывает на текущий элемент. Это часто ставит в тупик авторов, которые впервые создают шаблоны.
Почему это проблема
После переназначения точки такие выражения, как .Values или .Release, больше не работают внутри цикла, потому что корневой контекст больше не является точкой.
Сначала сохраните корень
Решение простое: до начала цикла сохраните корневую точку в переменной. Затем внутри range обращайтесь к исходному контексту через эту переменную.
{{ $root := . }}Используйте сохранённый корень
Внутри цикла заменяйте любой путь к значениям чарта путём через вашу переменную. Пишите $root.Values вместо .Values, чтобы выйти за пределы локальной точки.
{{ range .Values.items }}
release: {{ $root.Release.Name }}
{{ end }}Локальная точка по-прежнему работает
Для самого элемента цикла продолжайте использовать обычную точку. Внутри range точка — это текущий элемент, то есть именно то, что вам нужно.
{{ range .Values.ports }}
- port: {{ . }}
{{ end }}Сочетание элемента и корня
В настоящих шаблонах часто нужны оба значения одновременно: элемент из точки и значение чарта из корня. Сохранение $root позволяет удобно обращаться к каждому из них.
{{ $root := . }}
{{ range .Values.hosts }}
host: {{ . }}.{{ $root.Values.domain }}
{{ end }}Распространённый выбор имени
Во многих чартах эту переменную называют $root или $top, но имя выбираете вы. Важно сохранить точку до того, как range переназначит её.
range с индексом и значением
Форма с двумя переменными напрямую связывает индекс и значение, поэтому точка остаётся свободной. Но всё равно безопаснее выработать привычку сохранять корень.
{{ range $i, $v := .Values.ports }}
- {{ $i }}: {{ $v }}
{{ end }}Та же ловушка внутри with
Блок with тоже переназначает точку на поддерево. Тот же приём с сохранением корня помогает обращаться к значениям всего чарта и внутри него.
Проверка вывода цикла
Отрендерите чарт и изучите цикл. helm template покажет, разрешились ли корневые значения на каждой итерации так, как вы ожидали.
helm template ./mychartСохраняйте до входа
Порядок важен: присвойте $root := . вне цикла. Если сохранить значение внутри range, точка уже переназначена, и вы сохраните неправильное значение.
Быстрая проверка
Внутри цикла range выражение {{ .Values.port }} внезапно ничего не возвращает.
Итоги
Вы узнали, что range переназначает точку, что $root := . сохраняет исходный контекст, а локальная точка остаётся элементом цикла. 🔁
Часто задаваемые вопросы
Урок «Сохранение корневой точки внутри range» бесплатный?
Да — полный текст урока «Сохранение корневой точки внутри range» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Сохранение корневой точки внутри range»?
Используйте сохранённую ссылку на корень внутри циклов Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Сохранение корневой точки внутри range»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Присваивание переменных шаблона
- Сохранение корневой точки внутри range
- nindent и indent на практике
- Отладка пробелов в отрендеренном выводе