Ansible 2.1
ハンドブックで、私はプロセスを開始しました:
- name: Start Automation Agent, and enable start on boot
service: name=mongodb-mms-automation-agent state=started enabled=yes
再生の要約から、プロセスが正常に開始されたようです。
TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]
ただし、リモートホストにログインしてps
を実行すると、プロセスは実行されません。プロセスログを確認すると、いくつかの前提条件(意図された)に失敗しました。
プレイブックにタスクを記述して、プロセスが正常に開始されたことを確認するにはどうすればよいですか?
プロセスが実行されているかどうかを確認するコマンドを実行した後、failed
Jinja2フィルターで確認できます。
コマンドsystemctl status Apache2
の出力を使用して、Apacheが実行されているかどうかを判断する例を次に示します。
- name: Check if Apache is running
command: systemctl status Apache2
ignore_errors: yes
changed_when: false
register: service_Apache_status
- name: Report status of Apache
fail:
msg: |
Service Apache2 is not running.
Output of `systemctl status Apache2`:
{{ service_Apache_status.stdout }}
{{ service_Apache_status.stderr }}
when: service_Apache_status | failed
最初のタスクのコマンドが失敗した場合、2番目のタスクは失敗し、最初のタスクが失敗した理由が表示されます。
戻りコードはservice_Apache_status.rc
に格納されています。
失敗の出力例:
TASK: [Check if Apache is running] ***********************
failed: [localhost] => {"changed": false, "cmd": ["systemctl", "status", "Apache2"], "delta": "0:00:00.009379", "end": "2016-06-06 15:17:27.827172", "rc": 3, "start": "2016-06-06 15:17:27.817793", "stdout_lines": ["* Apache2.service", " Loaded: not-found (Reason: No such file or directory)", " Active: inactive (dead)"], "warnings": []}
stdout: * Apache2.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
...ignoring
TASK: [Report status of Apache] ***************************
failed: [localhost] => {"failed": true}
msg: Apache2 is not running
systemctl status Apache2 output:
* Apache2.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
異なる方法(信頼性は低いかもしれませんが)で、pgrep
を使用して、プロセスが実行されているかどうかを確認します。
- name: Check if Apache is running
Shell: pgrep Apache2
ignore_errors: yes
changed_when: false
register: service_Apache_status
- name: Report status of Apache
fail:
msg: |
Service Apache2 is not running.
Return code from `pgrep`:
{{ service_Apache_status.rc }}
when: service_Apache_status.rc != 0
これは私が今やっていることです:
- name: Confirm Automation Agent is running
command: service mongodb-mms-automation-agent status
register: agent_status
failed_when: "'NOT' in agent_status.stdout"
changed_when: False
failed_when
は1.4で導入されました。 changed_when: False
は、変更ステータスを抑制するために使用されます。 続きを読む 。