यदि कोई प्रक्रिया चल रही है, तो पुष्टि करने के लिए स्वीकार्य कार्य


10

अंय २.१

प्लेबुक में, मैंने एक प्रक्रिया शुरू की:

- 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जिन्जा 2 फ़िल्टर के साथ अपने कमांड को चलाने के बाद जांच सकते हैं कि प्रक्रिया चल रही है या नहीं।

यहाँ एक उदाहरण है जो 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

यदि पहले कार्य की कमान विफल हो गई, तो दूसरा कार्य विफल हो जाएगा और दिखाएगा कि पहला कार्य विफल क्यों हुआ।
रिटर्न कोड में संग्रहीत किया जाता है 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
@ हॉवर्डली: मेरा मानना ​​है कि यह रिटर्न कोड की जांच करता है, और यदि यह नहीं है 0, तो यह माना जाता है failed
डेल्टिक

1
पीएस के बजाय | grep आप कोशिश कर सकते हैंpgrep apache2
madeddie

@ कामेडी: मुझे यह पसंद है। सुझाव के लिए उत्तर दें pgrep!
डेल्टिक

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का उपयोग परिवर्तन की स्थिति को दबाने के लिए किया जाता है। और अधिक पढ़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.