有什么方法可以在Helm图表中提取远程默认值?

时间:2019-03-25 18:50:51

标签: bash terraform kubernetes-helm

我正在为自定义应用程序编写Helm chart,我们需要在组织内部的不同环境中启动该应用程序。该应用程序在Kubernetes中有一些代码段(这就是为什么我要写Helm图表),而在K8S之外还有其他代码段,更具体地说是我已经与Terraform一起编写的AWS中的各种资源。

其中一个资源是Lambda function,我前面是API Gateway。这意味着当我在新环境中运行Terraform时,它将创建Lambda函数并将API Gateway端点附加到该函数,并带有AWS为该端点生成的全新URL。我正在Terraform将该URL记录为output variable,并且还配置了non-local backend,以便Terraform远程保存其状态。

我想做的就是直接从Helm将它们绑在一起。我想要一种运行Terraform的方法,以便它启动我的Lambda,并通过这样做将生成的API网关URL保存到其远程状态文件中。然后,当我安装Helm图表时,我希望Helm足够聪明,可以自动从Terraform远程状态文件中提取以获取API Gateway端点所需的URL,以用作图表中的变量。

当前,我要么必须复制粘贴,要么使用Bash。我可以像这样使用bash脚本来摆脱它:

#!/bin/bash
terraform init
terraform plan -out=tfplan.out
terraform apply tfplan.out
export WEBHOOK_URL=$(terraform output webhook_url)
helm install ./mychart --set webhook.url="${WEBHOOK_URL}"

但是,使用Bash脚本完成此操作并不理想。它要求我在与Terraform文件相同的目录中运行它(因为必须从该目录调用输出命令),并且它不能解决我们可能使用的不同身份验证方法。此外,团队中的其他开发人员可能希望直接运行Terraform和Helm,而不必依靠自定义的bash脚本来为其执行操作。由于此bash脚本实际上是充当“操作员”的角色,并且由于Helm本身已是操作员,所以我想知道是否有某种方法可以完全在Helm中完成它?

Terraform远程状态文件最终只是JSON文件。我碰巧正在使用Consul后端,但是我可以很容易地使用S3后端或其他任何后端。最终,Terraform会将其状态显示为JSON文件的某个地方,(大概)Helm可以在其中读取并选择特定的输出值。除非我不确定Helm是否足够强大才能做到这一点。查看他们的文档,除了编写您的常规values.yaml模板以指定默认值外,我什么都没看到。 Helm是否具有对发出外部JSON REST请求的功能?这可以解决吗?

1 个答案:

答案 0 :(得分:0)

Helm 没有任何在文件/模板中搜索的功能。

它需要你确切地告诉它要注入什么。