Глубокое объединение с mergeOverwrite и dict
Программно объединяйте структурированные значения
«Глубокое объединение с mergeOverwrite и dict» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Создание словарей в шаблонах
Иногда в шаблоне нужно собрать словарь. Функция dict создаёт его из чередующихся пар ключей и значений.
{{ $cfg := dict "level" "info" "json" true }}Зачем объединять словари
Часто у Вас есть значения чарта по умолчанию и пользовательские переопределения, которые нужно объединить в один словарь. Именно это делает функция merge.
Поверхностное объединение
Функция merge копирует ключи из исходных словарей в целевой, но сохраняет значение в целевом словаре, если такой ключ уже существует.
{{ $out := merge $user $defaults }}merge отдаёт предпочтение целевому словарю
При использовании merge первый аргумент имеет приоритет при конфликте ключей, поэтому эта функция подходит, когда пользовательские значения должны переопределять значения по умолчанию.
Знакомьтесь: mergeOverwrite
Функция mergeOverwrite действует наоборот: последующие исходные словари перезаписывают целевой, накладывая значения поверх него.
{{ $out := mergeOverwrite $defaults $user }}Глубокое, а не поверхностное объединение
Обе вспомогательные функции выполняют объединение рекурсивно: вложенные словари объединяются ключ за ключом, а не заменяются целиком.
Предупреждение об изменении данных
Будьте внимательны: merge и mergeOverwrite изменяют свой первый аргумент на месте. Если исходный словарь нужно сохранить неизменным, передайте новый dict.
{{ $base := dict }}{{ $r := mergeOverwrite $base .Values.extra }}Шаблон со слоями значений по умолчанию
Распространённый шаблон — начать со словаря значений по умолчанию, а затем наложить поверх него пользовательские значения, чтобы для незаданных ключей безопасно использовались значения по умолчанию.
{{ $merged := mergeOverwrite (dict "port" 80) .Values.service }}Чтение объединённых значений
После объединения с результатом можно работать как с любым словарём и извлекать ключи с помощью dot или функции index, как обычно.
{{ $merged.port }}Сериализация результата
Чтобы вывести объединённую структуру в формате YAML, передайте её через toYaml и nindent, чтобы блок получил правильный отступ.
{{ toYaml $merged | nindent 4 }}Извлечение одного ключа
Если имя ключа является динамическим или содержит необычные символы, обращайтесь к словарю с помощью функции index, а не через обращение с точкой.
{{ index $merged "log-level" }}Быстрая проверка
Короткая проверка направления перезаписи.
Итоги
Вы познакомились с dict для создания словарей, с merge для сохранения ключей целевого словаря и с mergeOverwrite, позволяющей последующим значениям иметь приоритет. Все эти функции выполняют глубокое объединение. 🎉
Часто задаваемые вопросы
Урок «Глубокое объединение с mergeOverwrite и dict» бесплатный?
Да — полный текст урока «Глубокое объединение с mergeOverwrite и dict» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Глубокое объединение с mergeOverwrite и dict»?
Программно объединяйте структурированные значения Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Глубокое объединение с mergeOverwrite и dict»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Глубокое объединение с mergeOverwrite и dict
- tpl: рендеринг строк из значений
- Циклический перебор файлов с помощью range и .Files.Glob
- fail и пользовательские проверки