Helmfile — Файлы. Получить файл javascript

Я использую helmfile, а не helm, и попытался следовать этому примеру: Kubernetes — Как определить ConfigMap, созданный с использованием файла в yaml? но, похоже, не сработало (думаю, это из-за того, что я использовал helmfile).

У меня есть файл значений со следующим содержанием и двумя объектами данных:

configmap:
  configMapName: default-users-data-configmap
  configMapData:
    default-users-config.json: |-
      {
        "foo": "bar",
      }
    someJavaScriptFile.js: |-
      {{ .Files.Get "js/someJavaScriptFile.js" }} 

Моя карта конфигурации выглядит так:

{{- with .Values.configmap }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .configMapName }}
data:
  {{- .configMapData | toYaml | nindent 2 }}
{{- end }}

Теперь, что положительно, так это то, что я получаю содержимое json, отображаемое в configmap, когда я запускаю синхронизацию helmfile.

Но проблема в том, что отображается содержимое javascript:

Data
====
someJavaScriptFile.js:
----
{{ .Files.Get "js/someJavaScriptFile.js" }}

Он не читает содержимое из папки javascript и не помещает его в конфигурацию и не может определить, неправильный ли мой синтаксис.

моя структура каталога выглядит следующим образом:

helmfile -> charts -> contains charts
helmfile -> js -> someJavaScriptFile.js
helmfile -> helmfile.yaml

Каталог диаграмм содержит мою общую диаграмму с моими configmap.yaml, Deployment.yaml и т. д. Я запускаю синхронизацию в каталоге helmfile, поэтому предположил, что он подхватит этот javascript, он выгружает json, поэтому, предполагая, что он борется с javascript .

Есть идеи, в чем проблема? Спасибо

Есть ли сообщение об ошибке при запуске helm template?

Rui Jarimba 24.05.2024 11:03

Он развертывает содержимое в configmap, поэтому не ожидайте, что при запуске шаблона helmfile произойдет ошибка. Поскольку json попадает туда, в конфигурацию не помещается только содержимое js. Хотя при запуске шаблона я получаю сообщение об ошибке, которое не связано с этой проблемой, связанной с неопределенным выпуском, который необходимо исправить.

sam 24.05.2024 11:08

В контексте Helmfile, как файл helmfile.yaml относится к этому файлу значений? Встроенные шаблоны не будут обрабатываться, если файл не имеет имени *.yaml.gotmpl. Обратите внимание, что применимы обычные соображения по использованию механизма шаблонов Go для создания YAML; Например, если файл Javascript содержит более одной строки, вам, вероятно, понадобится indent это. (Я бы назвал .Files.Get в вашей таблице, как вы это делаете в ответе.)

David Maze 24.05.2024 12:39
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
3
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Мне удалось заставить это работать, внеся некоторые изменения в использование шаблонов:

  • defaultUsersConfig объявлен как объект YAML
  • В шаблон передается путь к файлу javascript вместо его содержимого.

Пример

моя-helmchart/values.yaml

configmap:
  configMapName: my-configmap
  defaultUsersConfig:
    user1:
      name: John Doe
      email: [email protected]
    user2:
      name: Jane Doe
      email: [email protected]
  javascriptFilePath: js/someJavaScriptFile.js

мой-helmchart/js/someJavaScriptFile.js

console.info("Hello, world!");

моя-helmchart/templates/configmap.yaml

{{- with .Values.configmap }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .configMapName }}
data:
  default-users-config.json: |-
{{ .defaultUsersConfig | toPrettyJson | indent 4 }}
  someJavaScriptFile.js: |-
{{ $.Files.Get .javascriptFilePath | indent 4 }}
{{- end }}

Обратите внимание, что вместо $.Files.Get .javascriptFilePath используется .Files.Get .javascriptFilePath.

Символ $ используется для ссылки на корневой контекст, позволяя вам получить доступ к .Files.Get изнутри блока with.

Бегу helm template:

---
# Source: my-helmchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  default-users-config.json: |-
    {
      "user1": {
        "email": "[email protected]",
        "name": "John Doe"
      },
      "user2": {
        "email": "[email protected]",
        "name": "Jane Doe"
      }
    }
  someJavaScriptFile.js: |-
    console.info("Hello, world!");

Я попробовал это (скопировав то же содержимое, что и выше), но получил, содержимое ниже не появилось - не уверен, что это из-за разницы в файле helmfile и файле helm: Data ==== someJavaScriptFile.js: ---- default-users-config .json: ---- { "user1": { "email": "[email protected]", "name": "John Doe" }, "user2": { "email": "jane.doe" @example.com", "name": "Джейн Доу" } }

sam 24.05.2024 12:19

@sam внимательно изучи мой код. Например, вы используете знак $ - например {{ $.Files.Get .... }}?

Rui Jarimba 24.05.2024 12:22

Пробовал как с $.Files, так и с .Files (без доллара это не получается, так как я изменил форматирование, чтобы оно выглядело как ваше), я просто скопировал весь приведенный вами пример. Спасибо

sam 24.05.2024 12:24

спасибо @rui - я сбросил файл someJavaScriptFile.js в разные места: один в каталоге диаграмм, один в каталоге js и в других местах, и похоже, что тот, что в каталоге диаграмм, был выбран вместо js/myfile.js я просто оставил его в корневой папке и указал myfile.js. Так что это был преимущественно мой синтаксис и неправильное расположение файла. Спасибо за помощь, возможно, теперь я смогу лучше настроить его, у меня есть база для работы. еще раз спасибо

sam 24.05.2024 12:30

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