Я использую 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 .
Есть идеи, в чем проблема? Спасибо
Он развертывает содержимое в configmap, поэтому не ожидайте, что при запуске шаблона helmfile произойдет ошибка. Поскольку json попадает туда, в конфигурацию не помещается только содержимое js. Хотя при запуске шаблона я получаю сообщение об ошибке, которое не связано с этой проблемой, связанной с неопределенным выпуском, который необходимо исправить.
В контексте Helmfile, как файл helmfile.yaml
относится к этому файлу значений? Встроенные шаблоны не будут обрабатываться, если файл не имеет имени *.yaml.gotmpl
. Обратите внимание, что применимы обычные соображения по использованию механизма шаблонов Go для создания YAML; Например, если файл Javascript содержит более одной строки, вам, вероятно, понадобится indent
это. (Я бы назвал .Files.Get
в вашей таблице, как вы это делаете в ответе.)
Мне удалось заставить это работать, внеся некоторые изменения в использование шаблонов:
defaultUsersConfig
объявлен как объект YAMLconfigmap:
configMapName: my-configmap
defaultUsersConfig:
user1:
name: John Doe
email: [email protected]
user2:
name: Jane Doe
email: [email protected]
javascriptFilePath: js/someJavaScriptFile.js
console.info("Hello, world!");
{{- 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 внимательно изучи мой код. Например, вы используете знак $
- например {{ $.Files.Get .... }}
?
Пробовал как с $.Files, так и с .Files (без доллара это не получается, так как я изменил форматирование, чтобы оно выглядело как ваше), я просто скопировал весь приведенный вами пример. Спасибо
спасибо @rui - я сбросил файл someJavaScriptFile.js в разные места: один в каталоге диаграмм, один в каталоге js и в других местах, и похоже, что тот, что в каталоге диаграмм, был выбран вместо js/myfile.js я просто оставил его в корневой папке и указал myfile.js. Так что это был преимущественно мой синтаксис и неправильное расположение файла. Спасибо за помощь, возможно, теперь я смогу лучше настроить его, у меня есть база для работы. еще раз спасибо
Есть ли сообщение об ошибке при запуске
helm template
?