Ansible कमांड्स का stdout कैसे देखें?


165

मैं ansible-playbook कमांड के लिए stdout कैसे देख सकता हूँ? -v केवल ansible आउटपुट दिखाता है, न कि अलग-अलग कमांड। यह बहुत अच्छा होगा यदि मैं यह पता लगा सकता हूं कि यह तुरंत कैसे करना है, इसलिए यदि कुछ विफल होता है या लटका हुआ है तो मैं देख सकता हूं कि क्यों।

जैसे

- name: print to stdout
  action: command echo "hello"

छपता था

TASK: [print variable] ******************************************************** 

hello

संबं
धत त य

जवाबों:


164

मुझे लगता है कि आप परिणाम को एक चर में पंजीकृत कर सकते हैं, फिर डिबग के साथ प्रिंट कर सकते हैं।

- name: print to stdout
  command: echo "hello"
  register: hello

- debug: msg="{{ hello.stdout }}"

- debug: msg="{{ hello.stderr }}"

26
इसके अतिरिक्त, आप सीधे एक चर के साथ डीबग कर सकते हैं - debug: var=hello। कभी-कभी यह मल्टीलाइन आउटपुट या Ansible मॉड्यूल आउटपुट (बजाय command/ shellआउटपुट) के लिए अधिक सहायक होता है ।
जेरलिंगगुगी

4
मुझे इसका उपयोग करके जावा आउटपुट प्राप्त करने में परेशानी हुई। फिक्स को जावा के सभी आउटपुट को स्टडआउट पर पुनर्निर्देशित करना है:shell: java -version 2>&1
Matthias Braun

20
यह एक बहुत बेहतर कुछ भी नहीं है, लेकिन कमांड पूरा होने के बाद आपको केवल स्टडआउट संदेश मिलता है । मैं एक मुद्दा था जहां ansible लटका हुआ दिखाई देगा। कारण यह था कि मैं rsync कमांड के लिए गलत उपयोगकर्ता नाम का उपयोग कर रहा था, जिसने इंटरेक्टिव पासवर्ड अनुरोध को रोक दिया था, जो कि केवल ansible को लटका दिया था। डिबग करना बहुत मुश्किल था - लेकिन अगर मैं रियलटाइम में स्टडआउट देख सकता हूं, तो मुझे तुरंत एहसास होगा कि मैंने क्या गलत किया है। यदि संभव हो तो मैं इस कार्यक्षमता को प्यार करता हूँ।
माइकल बी

10
जब यह काम करता है, तो इसका मतलब है कि एंसिबल डिबगिंग वास्तव में कठिन बनाता है। आइए कल्पना करें कि पहला कार्य कभी समाप्त नहीं होता है (शायद यह मूर्खता से उपयोगकर्ता इनपुट की प्रतीक्षा कर रहा है) ... उपयोगकर्ता को कभी पता नहीं चलेगा! इसके अलावा, registerमॉड्यूल, या जो कुछ भी यह उन वस्तुओं का उत्पादन नहीं करता है जिनके पास stdoutया stderrचर सेट है .... इसलिए यह वास्तव में बुरा है कि हम डिफ़ॉल्ट रूप से आउटपुट प्राप्त नहीं करते हैं: |
vlad-ardelean

95

के बजाय stdout मैं का उपयोग कर सुझाव है stdout_lines । मल्टीलाइन आउटपुट के लिए यह बहुत अच्छा है, उदा

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

देता है

TASK: [debug var=out.stdout_lines] ******************************************** 
ok: [local] => {
    "var": {
        "out.stdout_lines": [
            "total 61", 
            "lrwxrwxrwx   1 root root     7 Feb 15  2015 bin -> usr/bin", 
            "drwxr-xr-x   6 root root  1024 Aug 24 22:08 boot", 
            "drwxr-xr-x  22 root root  3580 Sep  8 18:41 dev",  
            [...] 
            "drwxr-xr-x   9 root root  4096 Aug 25 19:14 usr", 
            "drwxr-xr-x  13 root root  4096 Feb 25  2015 var"
        ]
    }
}

डिबगिंग उद्देश्यों के लिए वास्तविक समय आउटपुट के बारे में एक बंद बग रिपोर्ट है https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 उन कारणों पर चर्चा करते हुए कि यह संभव क्यों नहीं है और इसे लागू नहीं किया जाएगा।


16
"वास्तविक समय आउटपुट" बग को जोड़ने के लिए +1।
ntc2

अगर मैं out.stdout_lines (Ansible मेल टास्क के निकाय के रूप में) भेजना चाहता हूं, तो मैं इसे कैसे भेज सकता हूं, जब ईमेल प्राप्त होता है तो यह इस तरह नहीं दिखता है? [u'total 61 ', u'lrwxrwxrwx 1 रूट रूट 7 फ़रवरी 15 2015 बिन -> usr / बिन', u'drwxr-xr-x 6 रूट रूट 1024 Aug 24 22:08 बूट ', u' .... '।] मैं चाहता हूं कि यह इस तरह दिखे, जैसा कि टर्मिनल पर देखा गया है
क्रिस एफ

घातक: [127.0.0.1]: असफल! => {"कारण": "YAML लोड करते समय सिंटैक्स त्रुटि। \ n को अपेक्षित दस्तावेज़ नहीं मिला <strong> \ n \ n त्रुटि दिखाई दे रही है ... सिंटैक्स समस्या। \ n \ n \ n ऑफ़ेंडिंग लाइन प्रतीत होती है: \ n n \ n \ n- नाम: भागो lshsh और आउटपुट \ "ls / \" \ n ^ यहाँ \ n "}
नैट

20

मैंने पाया कि न्यूनतम stdout_callback -प्लेबुक के साथ न्यूनतम का उपयोग करके एड-हॉक एसिबल का उपयोग करने के लिए समान आउटपुट दिया गया था।

अपने ansible.cfg में (ध्यान दें कि मैं OS X पर हूं इसलिए callback_pluginsअपने इंस्टॉल के अनुरूप पथ को संशोधित करें )

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

ताकि इस तरह एक कार्य

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

इस तरह से आउटपुट देता है, जैसे एड-हॉक कमांड होता है

example | SUCCESS | rc=0 >>
hi ...

मैं ansible-playbook 2.2.1.0 का उपयोग कर रहा हूं


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