Как использовать условие if в диаграмме управления

У меня ниже значения в values.yaml

  pg_hba:
    - hostssl all all 0.0.0.0/0 md5
    - host    all all 0.0.0.0/0 md5

Требуется проверить, существует ли строка hostssl, если да, она должна перейти в цикл if и что-то сделать.

Я пытался использовать {{ if has "hostssl" .Values.pg_hba }}, но он ищет только точную строку "hostssll", а не всю строку.

Пожалуйста, помогите, как я могу проверить входную строку в состоянии if.


person Neelam Sharma    schedule 13.05.2020    source источник
comment
Что вы имеете в виду под существующей линией hostssl? Вы хотите проверить, содержит ли строка hostssl?   -  person Grigoriy Mikhalkin    schedule 13.05.2020
comment
Привет, Григорий, я хочу проверить, если hostssl all all 0.0.0.0/0 md5 содержит / выходит из условия if. Обратите внимание, что значения после hostall могут быть изменены в соответствии с требованием.   -  person Neelam Sharma    schedule 13.05.2020


Ответы (1)


Я не совсем понял ваш вопрос, поэтому вот 3 варианта.

Чтобы проверить, равны ли две строки, Go встроил функцию шаблона eq, вот пример использования:

{{ if eq "line" "line" }}
> true

Если вы хотите проверить, содержит ли строка hostssl строку. Helm имеет sprig в качестве зависимости - это модуль, который предоставляет дополнительные функции шаблона. Одна из этих функций - contains, которая проверяет, содержится ли строка внутри другой:

{{ if contains "cat" "catch" }}
> true

Если вы хотите проверить, имеет ли строка hostssl именно в начале, вы можете использовать другую функцию, предоставленную sprig - hasPrefix:

{{ if hasPrefix "cat" "catch" }}
> true

Вот список всех строковых функций, которые предлагает sprig. Если ни один из вышеперечисленных вариантов не удовлетворяет вашим требованиям, вы можете использовать функцию регулярного выражения для сопоставления.

person Grigoriy Mikhalkin    schedule 13.05.2020
comment
Ниже приводится содержание в values.yaml, спецификации: Патрони: pg_hba: - hostssl все все 0.0.0.0/0 md5 - хозяин все все 0.0.0.0/0 md5 я попытался, как показано ниже, {{если hasPrefix hostssl .Values.spec. patroni.pg_hba} Но я вижу ошибку ниже: template: postgres-operator-cluster / templates / pkicertificate.yaml: 1: 33: выполнение postgres-operator-cluster / templates / pkicertificate.yaml в ‹.Values.spec.patroni.pg_hba ›: Неправильный тип значения; ожидаемая строка; получил [] интерфейс {} - person Neelam Sharma; 13.05.2020
comment
@NeelamSharma .Values.spec.patroni.pg_hba - это массив. Вам нужно перебрать его и применить hasPrefix к каждой записи. Кроме того, вам необходимо преобразовать интерфейс в строку (или значения кавычек в values.yaml). Есть много ответов о том, как это можно сделать на SO. Воспользуйтесь поиском - person Grigoriy Mikhalkin; 13.05.2020
comment
Я определил ниже функцию для перебора диапазона и использования условия if: {{- define sslmode}} {{- range $ k, $ v: = $ .Values.spec.patroni}} {{index $ k | обрезать | -}}: {{if hasPrefix hostssl $ k}} {{- $ v | тоЯмл | trimSuffix \ n | nindent 2 -}} {{- end}} {{- end}} {{- end}} Но O / P возвращается как: pg_hba: Пожалуйста, дайте мне знать, что мне не хватает - person Neelam Sharma; 13.05.2020
comment
Вы перебираете Values.spec.patroni, но вам нужно перебирать Values.spec.patroni.pg_hba - person Grigoriy Mikhalkin; 13.05.2020
comment
Я тоже пробовал эту опцию, но она дает ту же ошибку, что и: выполнение postgres-operator-cluster / templates / deployment.yaml в ‹include sslmode.›: вызов ошибки include: template: postgres-operator-cluster / templates / _helpers.tpl: 61:14: выполнение sslmode в ‹trim›: неверный тип значения; ожидаемая строка; получил int - person Neelam Sharma; 13.05.2020
comment
@NeelamSharma {{ index $k | trim | -}} - вы обрезаете индекс, а не значение. Вместо этого попробуйте {{ index $v | trim | -}}. Но все же это, вероятно, не сработает, потому что у вас есть значения интерфейса, поэтому сначала вам нужно преобразовать их в строку. - person Grigoriy Mikhalkin; 13.05.2020