web-dev-qa-db-ja.com

OpenShift ocの作成が「すでに存在します」で失敗する

oc createを介してファイルに基づいてリソースのセットを作成しようとすると、それらがすでに存在する場合は失敗します。

ドキュメントはこちらoc createによると:

設定ファイルを解析し、1つ以上のOpenShift Enterpriseオブジェクトを作成します...既存のリソースはすべて無視されます

(強調鉱山)。

このコマンドの構成オプションが見当たらないか、この動作を変更するグローバルなオプションが見当たらないため、ドキュメントに反論しているようです。

私が実行したコマンドは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プロジェクトの状態を確認できるようにしたいだけです。

10
Tom Manterfield

ドキュメントはおそらくひどい言葉遣いです。つまり、同じ名前のオブジェクトが既に存在する特定のタイプのオブジェクトを作成しようとすると、新しいオブジェクトを作成しようとしても無視されます。

同じRAWリソース定義からアプリケーションの複数のインスタンスを作成しようとすると、状況が発生します。一連の未加工リソース定義のoc create -fを使用してコマンドラインから名前を上書きする方法がないため、2番目の展開は異なります。

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

また、一連のリソースを作成する場合は、通常、すべてのリソースタイプで1つの名前を使用し、それぞれに異なる名前を使用しないことをお勧めします。たとえば、すべてに「my-app-name」を使用します。 、個別ではなく、「my-buildconfig」、「my-imagestream」。

さらに重要なことは、すべてに同じキー/値が付いたラベルを追加して、一括して削除するなど、簡単に一緒に作業できるようにする必要があります。

デプロイしようとしているアプリケーションのタイプは何ですか?ガイドとして使用できるテンプレートの例を紹介します。


アップデート1

oc create -fを実行できるようにして、リソースがすでに存在する場合は問題がないようにしたいが、存在しない場合は作成する場合は、代わりにoc apply -fを使用してください。

13