Kubernetes Helm Chart requirements.yaml file dependencies false condition

Я использую Kubernetes Helm файл requirements.yaml для добавления зависимостей. На основе условия values.yaml будут созданы модули зависимостей.

Здесь я хочу выполнить необходимые зависимости, когда apache.enabled == false

values.yaml

external_apache:
  enabled: false

Файл requirements.yaml

dependencies:
- name:
  version:
  repository:
  condition: external_apache.enabled

Как добавить ложное условие?

Я пробовал следующее условие, но оно не работает:

condition: external_apache.enabled == false

person Sheshananda Naidu    schedule 08.06.2018    source источник
comment
Правильный синтаксис - condition: external_apache.enabled, но уверены ли вы, что файл получает значения из values.yaml?   -  person Vishal Biyani    schedule 08.06.2018
comment
да. Получение значений из файла values.yaml. Здесь я пытаюсь прочитать условие enabled: false, если enabled: true, тогда мы можем использовать условие condition: external_apache.enabled   -  person Sheshananda Naidu    schedule 08.06.2018
comment
Здесь я подтверждаю два условия. 1. if enabled: false --- добавление некоторых зависимостей 2. if enabled: true --- добавление некоторых других зависимостей Но я не получаю правильный синтаксис, когда включен : false   -  person Sheshananda Naidu    schedule 08.06.2018
comment
Я также столкнулся с той же проблемой с ошибкой при попытке установить диаграмму. Error: found in requirements.yaml, but missing in charts/ directory: subchart1 Версия helm - v2.11.0.   -  person zzxwill    schedule 29.12.2018


Ответы (4)


Какую версию Helm вы используете?

Похожая проблема была в репозитории Kubernetes на GitHub:

Невозможно использовать условие в "requirements.yaml" № 2111

Решением было обновить Helm до v2.2.0 +. В этой версии была добавлена ​​поддержка условий.

Примечание об обновлении Helm 2 до Helm 3:

Chart apiVersion обновлена ​​до версии 2 для следующих изменений спецификации:

  • Динамически связанные зависимости диаграмм перемещены в Chart.yaml ( Требования.yaml удалены, а требования - ›зависимости)
  • Библиотечные диаграммы (вспомогательные / общие диаграммы) теперь могут быть добавлены как динамически связанные зависимости диаграмм.
  • У диаграмм есть поле метаданных типа, чтобы определить диаграмму как приложение или диаграмму библиотеки. Это приложение по умолчанию, что означает, что его можно отобразить и установить.
  • Чарты Helm 2 (apiVersion = v1) все еще можно установить

В документации Helm или репозиторий, есть объяснение того, как работает условие: (я добавил несколько комментариев, чтобы облегчить чтение)

Условие - поле условия содержит один или несколько путей YAML (разделенных запятыми).
Теги - поле тегов представляет собой YAML-список меток, которые нужно связать с этой диаграммой.

# parentchart/requirements.yaml
dependencies:
      - name: subchart1
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart1.enabled, global.subchart1.enabled
        tags:
          - front-end        #(chart should be disabled because the tags.front-end is “false” in values.yaml file , but ...)
          - subchart1        #(subchart1.enabled condition path is present in values.yaml file and it has "true" value...)
                             #(this condition, so it overrides tag front-end and this chart will be enabled)

      - name: subchart2
        repository: http://localhost:10191
        version: 0.1.0
        condition: subchart2.enabled,global.subchart2.enabled
                  #(as soon as no one from these paths is exists in values.yaml this condition has ho effect)

        tags:
          - back-end        #(chart should be enabled because the tags.back-end is “true” in values.yaml file)
          - subchart2       #(and there is no condition path found in values.yaml to override it)

Если этот путь условия существует в values верхнего родителя и разрешается в логическое значение, диаграмма будет включена или отключена в зависимости от этого логического значения. Оценивается только первый действительный путь, найденный в списке, и если пути не существуют, условие не действует.

В верхних родительских значениях все диаграммы с тегами можно включить или отключить, указав тег и логическое значение.

# parentchart/values.yaml

subchart1:
  enabled: true          #(this could be found from requirements as subchart1.enabled and override tags in this case)
tags:
  front-end: false      #(this disables charts with tag front-end)
  back-end: true        #(this enables charts with tag back-end)

Логика и последовательность условий и тегов описаны в Теги и разрешение условий :

  • Условия (если они заданы в значениях) всегда имеют приоритет над тегами. Первый существующий путь условий побеждает, а последующие для этого графика игнорируются.
  • Теги оцениваются как «если какой-либо из тегов диаграммы верен, включить диаграмму».
  • Значения тегов и условий должны быть установлены в верхних родительских значениях.
  • Теги: ключ в значениях должен быть ключом верхнего уровня. Глобальные и вложенные теги: таблицы в настоящее время не поддерживаются.

Вы также можете установить теги и условия в командной строке:

helm install --set tags.front-end=true --set subchart2.enabled=false
person VASャ    schedule 08.06.2018

На основе документации и ответа от @VAS, ответ на ваш вопрос: невозможно использовать отрицание условия в requirements.yaml.

person Philippe    schedule 05.10.2018

Версия Helm v2.2.2 работала, а v2.10.0 - нет.

person zzxwill    schedule 29.12.2018

Хотя это немного поздно, но пользователи могут счесть это полезным. Я не запускаю helm install для родительской диаграммы из командной строки, но у меня есть сценарий оболочки для ее запуска и другой сценарий оболочки для свойств среды.

Я установил для условных логических значений значение true или false в скрипте среды и, используя значения в другом скрипте, который запускает helm для родительской диаграммы управления, я установил свойство enabled отдельной дочерней диаграммы в родительском файле values.yaml.

Кроме того, в версии 3.0.0+ конфигурация, выполненная ранее в файле requirements.yaml, теперь выполняется в самом родительском файле chart.yaml.

person KnockingHeads    schedule 14.06.2021