2

目前我有一个 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 转发它们命令。

4

1 回答 1

3

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

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

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

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

更新

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

于 2018-12-04T23:29:51.787 回答