Tugas yang memungkinkan untuk mengonfirmasi jika suatu proses sedang berjalan

10

Mungkin 2.1

Di buku pedoman, saya memulai proses:

- name: Start Automation Agent, and enable start on boot
  service: name=mongodb-mms-automation-agent state=started enabled=yes

Dari play rekap, tampaknya proses telah berhasil dimulai.

TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]

Namun, ketika masuk ke host jarak jauh dan melakukan ps, proses tidak berjalan. Memeriksa log proses telah gagal beberapa prasyarat (dimaksudkan).

Bagaimana cara saya menulis tugas di buku pedoman untuk mengonfirmasi proses telah berhasil dimulai?

Howard Lee
sumber

Jawaban:

12

Anda dapat memeriksa dengan failedfilter Jinja2 setelah menjalankan perintah Anda yang memeriksa apakah proses sedang berjalan.

Berikut adalah contoh yang menggunakan output dari perintah systemctl status apache2untuk memutuskan apakah Apache berjalan:

- 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

Jika perintah tugas pertama gagal, tugas kedua akan gagal dan menunjukkan mengapa tugas pertama gagal.
Kode pengembalian disimpan di service_apache_status.rc.

Contoh output dari kegagalan:

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)

Berikut ini cara yang berbeda (walaupun mungkin kurang dapat diandalkan), menggunakan pgrep, untuk memeriksa apakah proses sedang berjalan:

- 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
Deltik
sumber
Bagaimana cara when: service_apache_status | failedkerjanya? Apakah itu mencari failedtoken service_apache_status?
Howard Lee
2
@ Howardee: Saya percaya ini memeriksa kode kembali, dan jika tidak 0, itu dipertimbangkan failed.
Deltik
1
bukannya ps | grep Anda bisa mencobapgrep apache2
madeddie
@madeddie: Saya suka itu. Jawaban diperbarui untuk menyarankan pgrep!
Deltik
4

Inilah yang saya lakukan sekarang:

- 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_whendiperkenalkan pada 1.4. changed_when: Falsedigunakan untuk menekan status perubahan. Baca lebih lanjut .

Howard Lee
sumber