プロセスが実行されているかどうかを確認するAnsibleタスク


10

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と、プロセスは実行されません。プロセスログを確認すると、いくつかの前提条件(意図された)に失敗しました。

プレイブックにタスクを記述して、プロセスが正常に開始されたことを確認するにはどうすればよいですか?

回答:


12

failedプロセスが実行されているかどうかを確認するコマンドを実行した後、Jinja2フィルターで確認できます。

コマンドの出力を使用してsystemctl status apache2Apacheが実行されているかどうかを判断する例を次に示します。

- 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

どのように機能しwhen: service_apache_status | failedますか?それはfailedトークンを探しますservice_apache_statusか?
ハワードリー

2
@HowardLee:戻りコードをチェックすると思います。そうでない場合は0、と見なされfailedます。
Deltik

1
PSの代わりに| あなたが試すことができるgreppgrep apache2
madeddie

@madeddie:気に入った。回答を更新して提案しましたpgrep
Deltik

4

これは私が今やっていることです:

- 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_when1.4で導入されました。changed_when: False変更ステータスを抑制するために使用されます。続きを読む

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.