Openshift/OKD 模板 if/else 条件

Openshift/OKD template if/else condition

目前我有一个 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 }}

通过这样做,我可以在我的所有环境中使用相同的模板(例如:development/testing/production)但是根据创建时给出的参数,一些端口可用于调试或测试而无需转发它们每次使用 oc 命令。

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

但是,为了达到您想要的结果,您可以做以下两件事之一。

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

选项 2 如果您可以放宽 "same template" 约束,我们可以拥有同一模板的两种风格,一种具有特定端口,另一种具有参数化端​​口。此选项的唯一问题是每次更改 app/service 规格时都会更改 2 个模板,这违反了 DRY principle.

更新

在这里使用 Helm 和 OpenShift 可能是最好的选择。您可以使用 Helm 的条件模板化您的工件并将 Helm 应用程序部署到 OpenShift。这是一个 repository,其中包含为 OpenShift 量身定制的 Helm 图表。 此外,您需要指向正确的命名空间,以便 Tiller 将 Helm 与 OpenShift 结合使用。您可以找到有关它的更多详细信息 here.