Openshift / OKD模板,如果/其他情况

时间:2018-12-04 17:16:29

标签: kubernetes openshift okd

当前,我有一个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命令。

1 个答案:

答案 0 :(得分:0)

您不能在模板级别执行这种条件处理。

但是,要获得所需的结果,您可以做两件事之一。

选项1 传递条件以在模板级别处理所有必需的参数,例如MQTT-PORT,并在构建服务时映射正确的端口号。 这可能是正确的方法,因为模板被设计为尽可能少逻辑,因此您可以在较低的级别上进行所有决策。

选项2 如果您可以放宽“相同模板”约束,那么我们可以有两种相同模板的样式,一种具有特定的端口,另一种具有参数化的端口。此选项的唯一问题是,每次更改应用程序/服务规范时,都必须更改2个模板,这违反了DRY principle

更新

在OpenShift中使用Helm可能是最好的选择。您可以使用Helm的条件模板对工件进行模板化,然后将Helm应用程序部署到OpenShift。这是repository,其中包含针对OpenShift量身定制的Helm图表。 另外,您需要指向Tiller正确的名称空间,以将Helm与OpenShift一起使用。您可以here找到有关它的更多详细信息。