SQLスクリプトのリストを実行するタスクがあります。シーケンス内のスクリプトのANYの実行中にエラーが発生した場合、タスクは実行を停止する必要があります。ルーピングタスクの実行中にタスクエラーが発生する可能性があります。
'ERROR'
がstdoutにあるかどうかをチェックするループの現在の反復に対するレジスタのstdoutを確認する方法がありますか?
- name: Build and run SQLPlus commands
shell: 'echo @{{ item }} | {{ sqlplus }} {{ db_user }}/{{ db_pass }}@{{ environment }}'
register: sh1
with_items:
- ["a.sql", "b.sql"]
# failed_when: "'ERROR' in sh1.stdout_lines"
私は、最後のコメント行の線に沿って何かを考えていたが、sh1
がループタスクからレジスタ変数であるため、各SQLスクリプトからの出力はリストsh1
のresults
内に存在します。だから私はちょうど実行されたコマンドの特定のstdoutにアクセスする方法がわからない。
シェルコマンドがゼロ以外の終了コードを返した場合、タスクは自動的に失敗します。何もする必要はありません。 – helloV
@helloVエラーが発生したコマンドではありません。コマンドはsqlplusを使用してSQLスクリプトを実行し、スクリプトが正しく実行されなかった場合はsqlplusの出力に "ERROR"という単語が含まれます。 'echo $? 'でsqlplusコマンドをフォローした後に終了コード0を取得したため、シェルコマンドが正常に実行されていることがわかります –