从舵配置获取字符串数组

Cat*_*ish 2 kubernetes kubernetes-helm

最终,我试图['foo', 'bar']从头盔配置中获取一个字符串数组,例如在我的js应用程序中。

./vars/dev/organizations.yaml

...
organizations:
  - 'foo'
  - 'bar'
...
Run Code Online (Sandbox Code Playgroud)

./templates/configmap.yaml

...
data:
  organizations.yaml: |
    organizations: "{{ toYaml .Values.organizations | indent 4 }}"
...
Run Code Online (Sandbox Code Playgroud)

./templates/deployment.yaml

...
containers:
    args:
       - "--organizations-config"
       - "/etc/app/cfg/organizations.yaml"
...
Run Code Online (Sandbox Code Playgroud)

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)
...
Run Code Online (Sandbox Code Playgroud)

上面的输出是:

organizationsConfig =  { organizations: '    - foo - bar' }
organizationsConfig.organizations =      - foo - bar
Run Code Online (Sandbox Code Playgroud)

如何修改我的掌舵的配置,这样organizationsConfig.organizations['foo', 'bar']

Rya*_*son 8

获得所需输出的一种方法是更改​​:

...
organizations:
  - 'foo'
  - 'bar'
...
Run Code Online (Sandbox Code Playgroud)

至:

organizations: |
  [ 'foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

因此,Helm将其视为单个字符串。我们碰巧知道它包含数组内容,但是舵只认为它是一个字符串。然后我们可以直接在configmap中设置该字符串:

organizations: {{ .Values.organizations | indent 4 }}

这就是grafana图的作用,因为它首先迫使用户以所需格式指定列表。也许您希望从helm值中获取一个数组并将其转换为所需的格式,在我看来,这是json格式。为此,您可以按照Vault图示例进行操作。因此,configmap行变为:

organizations: {{ .Values.organizations | toJson | indent 4 }}

然后,用户输入的yaml可以与您最初拥有的一样,即真正的yaml数组。我尝试了一下,它可以工作,但是我注意到它提供了双引号内容,例如["foo","bar"]

您可以使用的另一种方法是:

organizations:
  {{- range .Values.organizations }}
    - {{ . }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

  • `组织:{{ .Values.organizations | toJson | 缩进 4 }}` 有效! (4认同)

Abd*_*UMI 7

有时根本原因是您忘记用引号括住每个项目:

organizations:
  {{- range .Values.organizations }}
    - {{ . | quote }} # <-- SEE Here
  {{- end }}
Run Code Online (Sandbox Code Playgroud)