2017-10-16 54 views
0

尝试通过oc create基于文件创建一组资源如果它们已经存在,则失败。OpenShift oc创建失败,并显示“已存在”

按照docs hereoc create应:

解析一个配置文件,并创建一个或多个OpenShift企业 对象...... 任何现有的资源被忽略。

(重点煤矿)。

我看不到这个命令或全局的任何配置选项会改变这种行为,在我看来是与文档相反。

我跑的命令是oc create -f some.file

输出是:

Error from server: services 'my-app' already exists 
Error from server: buildconfigs 'my-app' already exists 
Error from server: imagestreams 'my-app' already exists 
Error from server: deploymentconfigs 'my-app' already exists 
Error from server: routes 'my-app' already exists 
Error from server: secrets 'my-app' already exists 

它也将退出非零退出代码,所以它不只是一个警告。我在这里错过了一些显而易见的东西,或者误解了文档的内容?

我只是想能够应用此文件,并确保OpenShift项目之后的状态。

回答

2

该文档可能有点措辞不良。它所说的是,如果你尝试创建一个特定类型的对象,并且该类型的对象具有该名称,那么你尝试创建新对象将被忽略。

如果您尝试从相同的原始资源定义中创建应用程序的多个实例,则会出现这种情况。从一组原始资源定义中使用oc create -f无法覆盖命令行中的名称,因此第二个部署是不同的。

如果您想要从相同的资源定义中创建多个实例,您需要做的是将定义转换为名称的模板和参数,以便您可以为不同的实例传递不同的名称。这样就不会有冲突。当你创建一组资源时,通常最好在所有资源类型中使用一个名称,而不是为每个资源类型使用不同的名称,例如,只使用'my-app-name'为他们所有,而不是分别,'my-buildconfig','我的图像流'。

更重要的是,您需要确保您为它们添加一个具有相同键/值的标签,这样就很容易将它们一起使用,包括一次性删除它们。

您试图部署的应用程序的类型是什么?我可以指出你可以使用示例模板作为指导。


更新1

如果您希望能够运行oc create -f并将它不是抱怨,如果已经存在的资源,但创建它们,如果他们不这样做,使用oc apply -f代替。

+0

对不起,我实际试图做的是'创建'相同的资源(如果它们不存在)。本质上试图将其用作幂等调用,以确保一组资源存在一次,而不是重新创建它们。 而不是忽略该尝试,它会抛出错误。 值得注意的是,我确实为每个资源使用了相同的名称,我只是使用了上面的(穷人)例子。每个人都有一个标签也是一样。 –

+0

尝试使用'oc apply'而不是'oc create'。如果它不存在,它将被创建。如果它存在,它将被更新为你想要设置的内容。如果不希望当前的设置与试图设置它的设置相匹配,请查看是否“'--overwrite = false”选项设置为“oc应用”,以达到您想要的效果。 –

+0

哦完美,这似乎是我真正想要的!你介意把它添加到你的答案,所以我可以接受吗? –