Cherry从openshift模板中拾取对象

Cherry从openshift模板中拾取对象,openshift,openshift-origin,Openshift,Openshift Origin,我有一个openshift项目,其中包含大约20个DeploymentConfig和相应的服务等。我有一个声明这些对象的大型模板。由于部署顺序依赖关系,服务需要按特定顺序部署,我不能简单地这样做 oc new-app --template=my-template 因为所有东西都开始同时部署。我想做一些像 oc new-app --template=my-template --dc=my-specific-dc 当然,最后一个选项并不存在。我不能使用-selector=。。。任何一个那太好了。

我有一个openshift项目,其中包含大约20个DeploymentConfig和相应的服务等。我有一个声明这些对象的大型模板。由于部署顺序依赖关系,服务需要按特定顺序部署,我不能简单地这样做

oc new-app --template=my-template
因为所有东西都开始同时部署。我想做一些像

oc new-app --template=my-template --dc=my-specific-dc
当然,最后一个选项并不存在。我不能使用-selector=。。。任何一个那太好了。这似乎是一个很大的限制。有没有办法从主模板中挑选部署

我可以将所有服务拆分为单独的专用模板,但我的参数列表非常广泛,需要在每个模板中重复,因为没有包含通用yaml或JSON的包含注释。那将是一场噩梦


有没有解决部署顺序问题的方法?

我建议编写一个小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容器暂停部署,直到它所依赖的其他服务/应用程序就绪。

Graham建议的是一个好的解决方案。如果您愿意拆分模板,我可以考虑的另一个选项是将所有共享参数移出,并使用它们填充一个ConfigMap,该ConfigMap可以在不同的部署和文件中使用。这是我为可维护性选择的选项。一旦模板被拆分,脚本部署就变得微不足道了


我遇到的另一个潜在选项是wait-for-ready注释,它是alpha格式的,根据,它将允许您在其他部署之前进行一些部署,尽管这对您来说可能不够细粒度。我自己没有试过这个

我喜欢这个。我尝试了一种变体,它读取我的大模板,并根据提供给python脚本的参数提取特定对象。我还可以附加参数列表。现在我有一个地方可以声明所有模板参数和对象。现在,我只需要创建一个脚本,在每个部署上循环:1。cherry从主模板中提取信息并将其写入临时模板文件2。不要使用新的应用程序-F3。在按正确顺序进行下一次部署之前,Ping pod的运行状况。