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