如何在 helmfile 中获取值
How to get values in helmfile
bases:
- common.yaml
releases:
- name: controller
values:
- values/controller-values.yaml
hooks:
- events: [ "presync" ]
....
- events: [ "postsync" ]
.....
common.yaml
environments:
default:
values:
- values/common-values.yaml
共同价值观
a:b
当我将它添加到 common.values 时,我想将钩子的值移动到文件中,但我想将它添加到不同的文件而不是公共文件,所以我尝试添加 base
bases:
- common.yaml
- hooks.yaml
releases:
- name: controller
values:
- values/controller-values.yaml
hooks:
{{ toYaml .Values.hooks | indent 6 }}
hooks.yaml
environments:
default:
values:
- values/hooks-values.yaml
挂钩-values.yaml
hooks:
- events: [ "presync" ]
....
- events: [ "postsync" ]
.....
但是我得到一个错误
解析:模板:stringTemplate:21:21:在 <.Values.hooks> 处执行“stringTemplate”:地图没有键“hooks”的条目
我也试过改成o
hooks:
- values/hooks-values.yaml
我得到了一个错误
第 22 行:无法将 !!str values/...
解组为 event.Hook
我认为第一个问题是在 bases:
下同时指定 common.yaml
和 hooks.yaml
时,它们没有正确合并。由于它们提供相同的密钥,因此很可能稍后包含在 bases:
下的那个会覆盖另一个。
要解决这个问题,您可以在 helmfile 中使用 bases
中的单个条目:
bases:
- common.yaml
然后将您的值文件添加到 common.yaml
:
environments:
default:
values:
- values/common-values.yaml
- values/hooks-values.yaml
我不认为这是最佳做法,但它应该有效:)
第二个问题是bases
被特殊对待,i.e. helmfile.yaml is rendered before base layering is processed, therefore your values (coming from bases
) are not available at a point where you can reference them directly in the helmfile. If you embedded environments
directly in the helmfile, it would be fine. But if you want to keep using bases
, there seems to be couple of workarounds, and the simplest seemed to be adding ---
after bases
as explained in the next comment on the same thread.
因此,您的 helmfile 的工作版本可能是:
bases:
- common.yaml
---
releases:
- name: controller
chart: stable/nginx
version: 1.24.1
values:
- values/controller-values.yaml
hooks:
{{ toYaml .Values.hooks | nindent 6 }}
PS:chart: stable/nginx
只是随机选择的,能够helmfile build
。
bases:
- common.yaml
releases:
- name: controller
values:
- values/controller-values.yaml
hooks:
- events: [ "presync" ]
....
- events: [ "postsync" ]
.....
common.yaml
environments:
default:
values:
- values/common-values.yaml
共同价值观
a:b
当我将它添加到 common.values 时,我想将钩子的值移动到文件中,但我想将它添加到不同的文件而不是公共文件,所以我尝试添加 base
bases:
- common.yaml
- hooks.yaml
releases:
- name: controller
values:
- values/controller-values.yaml
hooks:
{{ toYaml .Values.hooks | indent 6 }}
hooks.yaml
environments:
default:
values:
- values/hooks-values.yaml
挂钩-values.yaml
hooks:
- events: [ "presync" ]
....
- events: [ "postsync" ]
.....
但是我得到一个错误 解析:模板:stringTemplate:21:21:在 <.Values.hooks> 处执行“stringTemplate”:地图没有键“hooks”的条目
我也试过改成o
hooks:
- values/hooks-values.yaml
我得到了一个错误
第 22 行:无法将 !!str values/...
解组为 event.Hook
我认为第一个问题是在 bases:
下同时指定 common.yaml
和 hooks.yaml
时,它们没有正确合并。由于它们提供相同的密钥,因此很可能稍后包含在 bases:
下的那个会覆盖另一个。
要解决这个问题,您可以在 helmfile 中使用 bases
中的单个条目:
bases:
- common.yaml
然后将您的值文件添加到 common.yaml
:
environments:
default:
values:
- values/common-values.yaml
- values/hooks-values.yaml
我不认为这是最佳做法,但它应该有效:)
第二个问题是bases
被特殊对待,i.e. helmfile.yaml is rendered before base layering is processed, therefore your values (coming from bases
) are not available at a point where you can reference them directly in the helmfile. If you embedded environments
directly in the helmfile, it would be fine. But if you want to keep using bases
, there seems to be couple of workarounds, and the simplest seemed to be adding ---
after bases
as explained in the next comment on the same thread.
因此,您的 helmfile 的工作版本可能是:
bases:
- common.yaml
---
releases:
- name: controller
chart: stable/nginx
version: 1.24.1
values:
- values/controller-values.yaml
hooks:
{{ toYaml .Values.hooks | nindent 6 }}
PS:chart: stable/nginx
只是随机选择的,能够helmfile build
。