从 helm 配置中获取字符串数组
Get array of strings from helm config
最终我试图获得一个字符串数组,例如['foo', 'bar']
在我的 helm 配置中的 js 应用程序中。
./vars/dev/organizations.yaml
...
organizations:
- 'foo'
- 'bar'
...
./templates/configmap.yaml
...
data:
organizations.yaml: |
organizations: "{{ toYaml .Values.organizations | indent 4 }}"
...
./templates/deployment.yaml
...
containers:
args:
- "--organizations-config"
- "/etc/app/cfg/organizations.yaml"
...
index.js
...
const DEFAULT_ORGANIZATIONS_PATH = './vars/local/organizations.yaml'
const program = require('commander')
program
.option(
'--organizations-config <file path>',
'The path to the organizations config file.', DEFAULT_ORGANIZATIONS_PATH)
.parse(process.argv)
function readConfigs () {
return Promise.all(configs.map(path => {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
err ? reject(err) : resolve(yaml.safeLoad(data))
})
})
}))
}
readConfigs()
.then(configs => {
let organizationsConfig = configs[3]
console.log('organizationsConfig = ', organizationsConfig)
console.log('organizationsConfig.organizations = ', organizationsConfig.organizations)
...
上面的输出是:
organizationsConfig = { organizations: ' - foo - bar' }
organizationsConfig.organizations = - foo - bar
如何修改我的 helm 配置,使 organizationsConfig.organizations
变为 ['foo', 'bar']
获得所需输出的一种方法是更改:
...
organizations:
- 'foo'
- 'bar'
...
收件人:
organizations: |
[ 'foo', 'bar']
因此 helm 将其视为单个字符串。我们碰巧知道它包含数组内容,但 helm 只是认为它是一个字符串。然后我们可以直接在 configmap 中设置该字符串:
organizations: {{ .Values.organizations | indent 4 }}
这就是 the grafana chart does in that it forces the user to specify the list in the desired format in the first place. Perhaps you'd prefer to take an array from the helm values and convert it to your desired format, which appears to me to be json format. To do that you could follow the example of the vault chart 的作用。所以 configmap 行变为:
organizations: {{ .Values.organizations | toJson | indent 4 }}
然后用户输入的 yaml 可以是您最初拥有的,即真正的 yaml 数组。我尝试了这个并且它有效但我注意到它提供了双引号内容,如 ["foo","bar"]
另一种方法是:
organizations:
{{- range .Values.organizations }}
- {{ . }}
{{- end }}
有时根本原因是您忘记用引号将每个项目括起来:
organizations:
{{- range .Values.organizations }}
- {{ . | quote }} # <-- SEE Here
{{- end }}
最终我试图获得一个字符串数组,例如['foo', 'bar']
在我的 helm 配置中的 js 应用程序中。
./vars/dev/organizations.yaml
...
organizations:
- 'foo'
- 'bar'
...
./templates/configmap.yaml
...
data:
organizations.yaml: |
organizations: "{{ toYaml .Values.organizations | indent 4 }}"
...
./templates/deployment.yaml
...
containers:
args:
- "--organizations-config"
- "/etc/app/cfg/organizations.yaml"
...
index.js
...
const DEFAULT_ORGANIZATIONS_PATH = './vars/local/organizations.yaml'
const program = require('commander')
program
.option(
'--organizations-config <file path>',
'The path to the organizations config file.', DEFAULT_ORGANIZATIONS_PATH)
.parse(process.argv)
function readConfigs () {
return Promise.all(configs.map(path => {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
err ? reject(err) : resolve(yaml.safeLoad(data))
})
})
}))
}
readConfigs()
.then(configs => {
let organizationsConfig = configs[3]
console.log('organizationsConfig = ', organizationsConfig)
console.log('organizationsConfig.organizations = ', organizationsConfig.organizations)
...
上面的输出是:
organizationsConfig = { organizations: ' - foo - bar' }
organizationsConfig.organizations = - foo - bar
如何修改我的 helm 配置,使 organizationsConfig.organizations
变为 ['foo', 'bar']
获得所需输出的一种方法是更改:
...
organizations:
- 'foo'
- 'bar'
...
收件人:
organizations: |
[ 'foo', 'bar']
因此 helm 将其视为单个字符串。我们碰巧知道它包含数组内容,但 helm 只是认为它是一个字符串。然后我们可以直接在 configmap 中设置该字符串:
organizations: {{ .Values.organizations | indent 4 }}
这就是 the grafana chart does in that it forces the user to specify the list in the desired format in the first place. Perhaps you'd prefer to take an array from the helm values and convert it to your desired format, which appears to me to be json format. To do that you could follow the example of the vault chart 的作用。所以 configmap 行变为:
organizations: {{ .Values.organizations | toJson | indent 4 }}
然后用户输入的 yaml 可以是您最初拥有的,即真正的 yaml 数组。我尝试了这个并且它有效但我注意到它提供了双引号内容,如 ["foo","bar"]
另一种方法是:
organizations:
{{- range .Values.organizations }}
- {{ . }}
{{- end }}
有时根本原因是您忘记用引号将每个项目括起来:
organizations:
{{- range .Values.organizations }}
- {{ . | quote }} # <-- SEE Here
{{- end }}