Я пытаюсь создать диаграмму управления Redis с помощью модуля в рабочем процессе GitHub. Похоже, проблема в файле helm-values.yaml в модуле. Ошибка преобразования YAML в JSON: yaml.
У меня есть рабочий процесс в github, который выполняет команду, которая terraform применяет модуль, находящийся в другом репозитории github. В этом модуле у меня есть файл helm-values.yaml, который выглядит следующим образом:
architecture: standalone
fullnameOverride: ${redis_deployment_name}
auth:
password: ${redis_admin_password}
# auth:
# existingSecret: redis
# existingSecretPasswordKey: redis-password
master:
${ indent(2, redis_affinity) }
${ indent(2, redis_nodeSelector) }
${ indent(2, redis_default_tolerations) }
persistence:
enabled: false
resources:
limits:
cpu: 350m
memory: 700Mi
requests:
cpu: 100m
memory: 256Mi
pdb:
enabled: true
# Explicit activation of Redis Stream
redisStreamEnabled: true
но я получаю эту ошибку:
Error: ---> error converting YAML to JSON: yaml: line 19: did not find expected key architecture: standalone
Я изменил файл манифеста, чтобы он выглядел так:
## @param architecture; architecture. Allowed: `standalone` or `replication`
##
architecture: standalone
fullnameOverride: ${redis_deployment_name}
auth:
password: ${redis_admin_password}
# auth:
# existingSecret: redis
# existingSecretPasswordKey: redis-password
master:
${ indent(2, redis_affinity) }
${ indent(2, redis_nodeSelector) }
${ indent(2, redis_default_tolerations) }
persistence:
enabled: false
resources:
limits:
cpu: 350m
memory: 700Mi
requests:
cpu: 100m
memory: 256Mi
pdb:
enabled: true
# Explicit activation of Redis Stream
redisStreamEnabled: true
Но теперь я получаю эту ошибку:
Error: ---> error converting YAML to JSON: yaml: line 21: did not find expected key ## @param architecture; architecture. Allowed: `standalone` or `replication`
Поэтому я изменил еще раз на это:
---
# Parameter info: architecture. Allowed values: `standalone` or `replication`
architecture: standalone
fullnameOverride: ${redis_deployment_name}
auth:
password: ${redis_admin_password}
# auth:
# existingSecret: redis
# existingSecretPasswordKey: redis-password
master:
${ indent(2, redis_affinity) }
${ indent(2, redis_nodeSelector) }
${ indent(2, redis_default_tolerations) }
persistence:
enabled: false
resources:
limits:
cpu: 350m
memory: 700Mi
requests:
cpu: 100m
memory: 256Mi
pdb:
enabled: true
# Explicit activation of Redis Stream
redisStreamEnabled: true
Но теперь я получаю эту ошибку:
Error: ---> error converting YAML to JSON: yaml: line 22: did not find expected key ---
│ # Parameter info: architecture. Allowed values: `standalone` or `replication`
Каждый раз, когда я меняю код, я получаю ошибки, связанные с первой строкой, даже если это комментарий. Я использовал **yamllint **, чтобы убедиться, что код работает локально, когда я не вызываю его как модуль, когда я применяю terraform непосредственно в корневом модуле. В чем проблема?
Это код модуля terraform:
resource "helm_release" "redis" {
timeout = 240
name = "redis"
namespace = var.namespace
chart = "oci://registry-1.docker.io/bitnamicharts/redis"
version = var.helm_chart_version
values = [templatefile("${path.module}/manifests/redis-values.yaml", {
redis_deployment_name = var.redis_deployment_name
redis_affinity = var.redis_affinity
redis_nodeSelector = var.redis_nodeSelector
redis_default_tolerations = var.redis_default_tolerations
redis_admin_password = var.redis_admin_password
})]
}
и вот как я это называю:
module "redis" {
source = "git::https......"
namespace = var.namespace
redis_deployment_name = var.redis_deployment_name
redis_affinity = var.redis_affinity
redis_nodeSelector = var.redis_nodeSelector
redis_default_tolerations = var.redis_default_tolerations
redis_admin_password = "toto"
}
Это скриншоты рабочего процесса GitHub:
Я добавил код терраформирования, на выходе плана терраформирования - ошибка в описании.
Видите, это кривой шар, вы используете templatefile
, вы уверены, что результат верен? ...можете ли вы поделиться дополнительными результатами плана терраформирования??
Просто для проверки, можете ли вы жестко закодировать все значения в файлах yaml и вместо templatefile
использовать простой file
, как в примере здесь: registr.terraform.io/providers/hashicorp/helm/latest/docs/…
Я добавил скриншот вывода конвейера, так как вы можете видеть, что выходные переменные анализируются и правильно считываются с правильными значениями.
Я ни в чем не могу быть уверен по этим скриншотам... просто отбросьте это templatefile
, это может быть проблемой, можете ли вы протестировать без него?
Проблема с файлом в том, что он может принимать только один аргумент! Должно быть что-то вроде этого:values = [file("${path.module}/manifests/redis-values.yaml")] Но, как вы можете видеть в моем коде, я вызываю другие переменные из файла var, Мне нужно, чтобы он был универсальным, потому что я использую его как модуль. Я не могу жестко запрограммировать значения :(
Да, мы знаем, что file
может принимать только один аргумент... это нужно для того, чтобы изолировать проблему... есть 3 потенциальных кандидата на эту проблему: _ _ _ 1 - код провайдера helm_release
_ _ _ 2 - вывод templatefile
_ _ _ 3 — содержимое yaml-файла
... и я прошу вас попробовать, потому что с предоставленной вами информацией мы не можем воспроизвести проблему, поскольку она находится на GitHub, возможно, опубликуйте ссылку на репозиторий, если он частный, просто создайте новый, который воспроизводит проблемы с фиктивными данными
Мне пришлось удалить весь прокомментированный код и использовать yamllint для проверки кода.
Можете ли вы предоставить минимальный код терраформирования, чтобы воспроизвести эту проблему? ... также результаты плана терраформирования могут быть очень полезны