樱桃从openshift模板中挑选对象

时间:2018-04-19 21:07:11

标签: openshift openshift-origin

我有一个openshift项目,包含大约20个deploymentconfigs和相应的服务等。我有一个大型模板来声明这些对象。由于部署顺序依赖性(服务需要按特定顺序部署),我不能简单地执行

oc new-app --template=my-template

因为一切都开始同时部署。我想做点什么

oc new-app --template=my-template --dc=my-specific-dc

当然,最后一个选项并不存在。我无法使用" - selector = ..."无论是。那本来不错。这似乎是一个很大的限制。有没有办法从主模板中挑选部署?

我可以将所有服务拆分为单独的专用模板,但我的参数列表(相当广泛)需要在每个模板中重复,因为没有" include"包含常见yaml(或JSON)的注释。这将是一个维持的噩梦。

如何解决部署排序问题?

2 个答案:

答案 0 :(得分:1)

我建议编写一些Python脚本会给你最大的灵活性。

import json
import sys

data = json.loads(sys.stdin.read())

newitems = []

for item in data['items']:
    if item['kind'] == 'ConfigMap':
        if item['metadata']['name'] == 'poc-kernel-gateway-1-cfg':
            newitems.append(item)

data['items'] = newitems

print(data)

像以下一样运行:

oc get templates poc-kernel-gateway-1 -o json | oc process --param A=B -f - | python /tmp/process.py

或者如果已经在文件中有模板:

oc process --param A=B -f template.py | python /tmp/process.py

然后,您可以将结果反馈到oc create

关于订购问题,一种方法是使用init容器暂停部署,直到它所依赖的其他服务/应用程序准备就绪。

答案 1 :(得分:0)

格雷厄姆建议的是一个很好的解决方案。如果您愿意拆分模板,我可以想到的另一个选择是移出所有共享参数,并使用它们填充可以跨部署和不同文件使用的ConfigMap。这是我选择可维护性的选项。一旦模板被拆分,那么脚本部署就很简单了。

我遇到的另一个潜在选项是“等待准备”注释,它是alpha版,根据docs,允许你在其他人之前调出一些部署,尽管这样做对你来说可能不够精细。我自己没试过这个