Ошибка преобразования YAML в JSON: yaml: строка 22: не найден ожидаемый ключ

Я пытаюсь создать диаграмму управления 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:

Можете ли вы предоставить минимальный код терраформирования, чтобы воспроизвести эту проблему? ... также результаты плана терраформирования могут быть очень полезны

Helder Sepulveda 17.05.2024 14:02

Я добавил код терраформирования, на выходе плана терраформирования - ошибка в описании.

Marwen Taallah 17.05.2024 15:50

Видите, это кривой шар, вы используете templatefile, вы уверены, что результат верен? ...можете ли вы поделиться дополнительными результатами плана терраформирования??

Helder Sepulveda 17.05.2024 16:26

Просто для проверки, можете ли вы жестко закодировать все значения в файлах yaml и вместо templatefile использовать простой file, как в примере здесь: registr.terraform.io/providers/hashicorp/helm/latest/docs/…

Helder Sepulveda 17.05.2024 16:33

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

Marwen Taallah 17.05.2024 16:54

Я ни в чем не могу быть уверен по этим скриншотам... просто отбросьте это templatefile, это может быть проблемой, можете ли вы протестировать без него?

Helder Sepulveda 17.05.2024 17:01

Проблема с файлом в том, что он может принимать только один аргумент! Должно быть что-то вроде этого:values ​​= [file("${path.module}/manifests/redis-values.yaml")] Но, как вы можете видеть в моем коде, я вызываю другие переменные из файла var, Мне нужно, чтобы он был универсальным, потому что я использую его как модуль. Я не могу жестко запрограммировать значения :(

Marwen Taallah 17.05.2024 17:23

Да, мы знаем, что file может принимать только один аргумент... это нужно для того, чтобы изолировать проблему... есть 3 потенциальных кандидата на эту проблему: _ _ _ 1 - код провайдера helm_release _ _ _ 2 - вывод templatefile _ _ _ 3 — содержимое yaml-файла

Helder Sepulveda 18.05.2024 15:34

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

Helder Sepulveda 18.05.2024 15:38
Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Redis - это популярная база данных типа "ключ-значение" в памяти с поддержкой различных типов и структур данных, которая в основном используется для...
2
9
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне пришлось удалить весь прокомментированный код и использовать yamllint для проверки кода.

Другие вопросы по теме