2016-07-19 3 views
0

を実行する上で、私はAnsibleにおけるAWSのデプロイメント環境をスピンアップしようとしている、と私は何かが道に沿って失敗した場合、Ansibleが持つAWS上のすべてのものを切断するようにしたいですこれまでにスピンアップされている。内にAnsible - エラー、終了の役割とクリーンアップ

- name: this command prints FAILED when it fails 
    command: /usr/bin/example-command -x -y -z 
    register: command_result 
    failed_when: "'FAILED' in command_result.stderr" 

だけでなく、他の事:私が試した

<main.yml> 
- hosts: localhost 
    connection: local 
    roles: 
    - make_ec2_role 
    - make_rds_role 
    - make_s3_role 

    2. Then I want it to run some code based on that error here. 

<make_rds_role> 
    - name: "Make it" 
    - rds: 
     params: etc <-- 1. Let's say it fails in the middle here 

:私はAnsibleが役割例えば

内のエラーをスローするために取得する方法を見つけ出すことはできませんドキュメンテーションですが、私が本当に欲しいのは、 "ブロック"や "レスキュー"コマンドのようなものを使用する方法ですが、同じ本や演劇の中でしか役割ではないことがわかります。誰かがこれを行う良い方法がありますか?あなたの役割内部

答えて

0

ラップタスクブロック/レスキュー事に。
レスキューブロックに少なくとも1つのタスクがあることを確認してください。この方法では、Ansibleはホストを失敗としてマークしません。このよう
:Ansible registeransible_failed_taskと救助ブロックをヒットansible_failed_result

- block: 
    - name: task 1 

    ... # something bad may happen here 

    - name: task N 

    rescue: 
    - assert: # we need a dummy task here to prevent our host from being failed 
     that: ansible_failed_task is defined 

最近のバージョン。
だから、このようなあなたのmain.ymlの脚本で、いくつかのpost_tasks操作を行うことができます。

post_tasks: 
    - debug: 
     msg: "Failed task: {{ ansible_failed_task }}, failed result: {{ ansible_failed_result }}" 
     when: ansible_failed_task is defined 

しかし、このトリックは、実行から他の役割を防ぐことはできませんことを警告されます。
したがって、make_rds_roleが失敗した場合は、make_s3_roleが適用され、後でpost_tasksが実行されます。あなたはそれを防ぐために必要がある場合
は、それぞれの役割や何かの始まりにansible_failed_taskという事実のためにいくつかのチェックを追加します。

+0

私はそれを試して動作します。私は、定義されたエラー状態変数を持つ可能性があることを知らなかった。ありがとう! – ExaExcellion

関連する問題