我想创建一个playbook来安装来自IBM的ZIP存档提供的外部helm图表。它需要我们从自定义的值(例如主机到docker注册表)覆盖values.yml中的某些值。
来自IBMs values.yml的示例
image:
pullPolicy: IfNotPresent
repository: artifactory.swg.usma.ibm.com:6562
由于非公共仓库由IBM设置,我将图像(从IBM发布版下载)上传到我的自定义注册表registry.example.com
,并希望在我的playbook中设置它:
- name: CNX Bootstrap
helm:
# Port forwarding from tiller to localhost
host: localhost
state: present
name: bootstrap-test
namespace: "{{namespace}}"
chart:
name: bootstrap
source:
type: directory
location: /install/component-pack/IC-ComponentPack-6.0.0.7/microservices_connections/hybridcloud/helmbuilds/bootstrap
values:
image.repository: "registry.example.com"
这不起作用,pod日志说:
无法拉图像“artifactory.swg.usma.ibm.com:6562/bootstrap:20190204-022029”:rpc错误:代码=未知desc =获取https://artifactory.swg.usma.ibm.com:6562/v1/_ping:服务不可用
所以它仍然使用错误的注册表,我的自定义values
似乎被忽略。使用helm
cli,我可以使用--set
开关覆盖,如下所示:
helm install --name=bootstrap /install/component-pack/IC-ComponentPack-6.0.0.7/microservices_connections/hybridcloud/helmbuilds/bootstrap-0.1.0-20190204-022029.tgz --set image.repository=registry.example.com
--set
switch does in Ansible?module documentation不提供任何信息。我只使用found out pyhelm。但我找不到覆盖默认值的方法。
当PyHelm获取从Ansible图表定义传递的值时,它将作为字典传递,并转换为yaml。 Tiller(Helm的服务器端组件)期望传递的值yaml保持嵌套。因此,您需要将它们存储为Ansible定义中的嵌套字典。
在你的情况下,它看起来像:
- name: CNX Bootstrap
helm:
# Port forwarding from tiller to localhost
host: localhost
state: present
name: bootstrap-test
namespace: "{{namespace}}"
chart:
name: bootstrap
source:
type: directory
location: /install/component-pack/IC-ComponentPack-6.0.0.7/microservices_connections/hybridcloud/helmbuilds/bootstrap
values:
image:
repository: "registry.example.com"