测试舵图模板 [英] Testing helm chart templating
本文介绍了测试舵图模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有一种方法可以测试模板对于所有可能的值是否都工作正常?
(注意:这与Helm测试不同,Helm测试用于通过作业中运行的任意代码测试部署的图表)。
我想要实现的是迭代一组值,并检查每个值生成的K8资源。
假设我们想测试图表是否写得正确:
图表:
Values.yaml
app:
port: 8081
pod2:
enabled: true
AppPod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: AppPod
labels:
app: nginx
spec:
...
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: {{ $.Values.app.port| default 8080 }}
Pod2.yaml
{{- if $.Values.pod2.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: Pod2
labels:
app: nginx2
spec:
...
{{- end}}
我们要运行以下测试:
- 使用默认Values.yaml->;Assert port=8081并创建Pod2
- 缺少app.port->;Assert port=8080
- 启用pod2.时为FALSE->;未创建断言Pod2
- 缺少pod2-&>测试将失败,因为密钥‘pod2’是必需的
所以基本上是测试模板逻辑。
我现在正在做的事情:
每当我修改图表中的某些内容时,我只是针对不同的Values.yaml运行Helm模板,并手动检查结果。手动执行此操作容易出错,并且图表包含的模板越多,此操作就越耗时。
是否有内置的舵面功能或单独的框架?
推荐答案
是的,我们使用rego policy rules执行此操作。设置并不复杂,这是作为我们其中一个渠道的一部分的设置(这是一个非常简单的示例,可以帮助您开始):
# install conftest to be able to run helm unit tests
wget https://github.com/open-policy-agent/conftest/releases/download/v0.28.1/conftest_0.28.1_Linux_x86_64.tar.gz
tar xzf conftest_0.28.1_Linux_x86_64.tar.gz
chmod +x conftest
# you can call "helm template" with other override values of course, too
helm template src/main/helm/my-service/ > all.yaml
echo "running opa policies tests"
if ! ./conftest test -p src/main/helm/my-service/ all.yaml; then
echo "failure"
exit 1
fi
在my-service
目录中有一个policy
文件夹,其中保存用于测试的";Rules";(尽管这可以作为参数传递)。以下是我最近不得不写的两条规则的示例:
package main
deny_app_version_must_be_present[msg] {
input.kind == "Deployment"
env := input.spec.template.spec.containers[_].env[_]
msg := sprintf("env property with name '%v' must not be empty", [env.name])
"APP_VERSION" == env.name ; "" == env.value
}
deny_app_version_env_variable_must_be_present[msg] {
input.kind == "Deployment"
app_version_names := { envs | envs := input.spec.template.spec.containers[_].env[_]; envs.name == "APP_VERSION"}
count(app_version_names) != 1
msg := sprintf("'%v' env variable must be preset once", ["APP_VERSION"])
}
这将验证Deployment
中的容器是否具有名为APP_VERSION
的环境变量,该变量必须唯一且不为空。
这篇关于测试舵图模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文