当前,我有一个OKD / openshift模板,该模板可在特定容器上显示端口1883:
ports:
- name: 1883-tcp
port: 1883
containerPort: 1883
protocol: TCP
hostPort: ${MQTT-PORT}
是否可以根据参数设置if / else子句。例如:
ports:
- name: 1883-tcp
port: 1883
containerPort: 1883
protocol: TCP
{{ if ${MQTT-PORT} != 0 }}
hostPort: ${MQTT-PORT}
{{ /if }}
这样做,我可以在所有环境(例如,开发/测试/生产)中使用相同的模板,但是基于创建所提供的参数,某些端口可用于调试或测试,而不必每次都转发它们使用oc命令。
答案 0 :(得分:0)
您不能在模板级别执行这种条件处理。
但是,要获得所需的结果,您可以做两件事之一。
选项1
传递条件以在模板级别处理所有必需的参数,例如MQTT-PORT
,并在构建服务时映射正确的端口号。
这可能是正确的方法,因为模板被设计为尽可能少逻辑,因此您可以在较低的级别上进行所有决策。
选项2 如果您可以放宽“相同模板”约束,那么我们可以有两种相同模板的样式,一种具有特定的端口,另一种具有参数化的端口。此选项的唯一问题是,每次更改应用程序/服务规范时,都必须更改2个模板,这违反了DRY principle。
更新
在OpenShift中使用Helm可能是最好的选择。您可以使用Helm的条件模板对工件进行模板化,然后将Helm应用程序部署到OpenShift。这是repository,其中包含针对OpenShift量身定制的Helm图表。 另外,您需要指向Tiller正确的名称空间,以将Helm与OpenShift一起使用。您可以here找到有关它的更多详细信息。