2017-10-16 22 views
0

oc createでファイルに基づいてリソースセットを作成しようとすると、すでに存在する場合は失敗します。 docs hereoc createによると OpenShift oc createが "already exists"で失敗する

は、必要があります。

は、設定ファイルを解析し、一つ以上のOpenShiftエンタープライズ オブジェクト...既存のリソースは無視されを作成します。

(emphasis mine)。

このコマンドの設定オプションが表示されない場合や、この動作を変更するグローバルオプションが表示されない場合は、ドキュメントに反すると思われます。

私が走ったコマンドがある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

ドキュメンテーションは多分ひどく言われています。それが言っていることは、その名前の型のオブジェクトがすでに存在する特定の型のオブジェクトを作成しようとすると、新しい型を作成しようとする試みは無視されるということです。

同じrawリソース定義からアプリケーションの複数のインスタンスを作成しようとすると、状況が発生します。 oc create -fをRAWリソース定義のセットから使用してコマンドラインの名前を上書きする方法はありません。そのため、2番目の配備は区別されます。

同じリソース定義から複数のインスタンスを作成する場合は、定義をテンプレートに変換して名前をパラメータ化して、異なるインスタンスに異なる名前を渡すことが必要です。そうすれば、衝突することはありません。

また、リソースセットを作成するときは、すべてのリソースタイプで1つの名前を使用し、それぞれに異なる名前を使用しないほうがよい(たとえば、 'my-app-name'それらのすべてに対して、別々にではなく、 'my-buildconfig'、 'my-imagestream'。

もっと重要なのは、同じキー/値のラベルをすべて追加する必要があるため、それらを一緒に扱うことが容易であることです。

導入しようとしているアプリケーションの種類は何ですか?ガイドとして使用できるサンプルテンプレートを教えてくれるかもしれません。


UPDATE 1

あなたができる実行oc create -fようにしたいと、それはリソースがすでに存在する場合は文句を言うが、彼らは、代わりにoc apply -fを使用しない場合は、それらを作成していない場合。

+0

申し訳ありませんが、私が実際にやっていることは、同じリソースを(作成していない場合)作成することです。本質的には、リソースを再作成するのではなく、一度存在することを保証するために、それを冪等呼出しとして使用しようとします。 その試行を無視するのではなく、エラーをスローします。 私は実際に各リソースに同じ名前を使用していますが、私は上記の(悪い)例を使用しました。ラベルがついている人も同じです。 –

+0

'oc create'の代わりに 'oc apply'を使用してみてください。存在しなければ作成されます。存在する場合は、設定しようとしているものに更新されます。現在のものに設定しようとしているものと一致させたくない場合は、 '' --overwrite = false''オプションを '' oc apply''に渡して、あなたが望むものが得られるかどうか見てください。 –

+0

ああ完璧な、私が本当に欲しかったと思われる!あなたの答えに追加してもらえますか? –

関連する問題