目前,我有一个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命令转发它们。
发布于 2018-12-04 23:29:51
您不能在模板级别执行这种条件处理。
但是,为了达到你想要的结果,你可以做两件事中的一件。
选项1传递在模板级别处理条件所需的所有参数,如MQTT-PORT,并在构建服务时映射正确的端口号。这可能是正确的方法,因为模板被设计成尽可能少的逻辑,您在一个低得多的层次上进行所有决策。
选项2如果您可以放松“相同模板”约束,我们可以有2种相同模板的样式,一个具有特定端口,另一个具有参数化端口。此选项的唯一问题是每次更改应用程序/服务规范时更改2个模板,这违反了干原理。
更新
在这里,在OpenShift中使用Helm可能是最好的选择。您可以使用Helm的条件将您的工件临时化,并将Helm应用程序部署到OpenShift。这是一个存储库,它有一个为OpenShift量身定制的Helm图表。此外,您还需要为Tiller指向正确的命名空间,以便在OpenShift中使用Helm。您可以找到关于它的更多细节,这里。
https://stackoverflow.com/questions/53618291
复制相似问题