सवाल उत्तरदायी आदेशों के stdout कैसे देखें?


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

जैसे

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

प्रिंट करेंगे

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

hello

124
2017-09-06 21:01


मूल


सम्बंधित: serverfault.com/questions/667252/... - Capi Etheriel
stackoverflow.com/questions/20563639/... - JonnyJD


जवाब:


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

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

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

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

126
2017-09-14 13:01



इसके अतिरिक्त, आप सीधे एक चर को डीबग कर सकते हैं - debug: var=hello। कभी-कभी यह मल्टीलाइन आउटपुट या उत्तरदायी मॉड्यूल आउटपुट (इसके बजाय command/shell उत्पादन)। - geerlingguy
मुझे इसका उपयोग कर जावा आउटपुट प्राप्त करने में परेशानी थी। फिक्स सभी जावा के आउटपुट को stdout पर रीडायरेक्ट करना है: shell: java -version 2>&1 - Matthias Braun
यह बहुत बेहतर कुछ भी नहीं है, लेकिन आपको केवल स्टडआउट संदेश मिलता है बाद आदेश सफलतापूर्वक पूरा हो गया है। मुझे एक मुद्दा था जहां उत्तरदायी लटका दिखाई देगा। कारण यह था कि मैं एक rsync कमांड के लिए गलत उपयोगकर्ता नाम का उपयोग कर रहा था, जिसने इंटरैक्टिव पासवर्ड अनुरोध को स्पूल किया, जिसने अभी जवाब दिया। डीबग करना बहुत मुश्किल था - लेकिन अगर मैं रीयलटाइम में स्टडआउट देख सकता था, तो मुझे तुरंत एहसास हुआ कि मैंने क्या गलत किया होगा। यदि संभव हो, तो मैं इस कार्यक्षमता को प्यार करूंगा। - Michael B
जबकि यह काम करता है, इसका मतलब है कि उत्तरदायी डिबगिंग वास्तव में कठिन बनाता है। आइए कल्पना करें कि पहला कार्य कभी समाप्त नहीं होता है (शायद यह मूर्खतापूर्वक उपयोगकर्ता इनपुट के लिए प्रतीक्षा कर रहा है) ... उपयोगकर्ता कभी नहीं जानता! इसके अलावा, register मॉड्यूल, या जो भी हो वह वस्तुओं का उत्पादन नहीं करता है stdout या stderr परिवर्तनीय सेट .... तो यह वास्तव में बुरा है कि हम डिफ़ॉल्ट रूप से आउटपुट नहीं प्राप्त करते हैं: | - vlad-ardelean


के बजाय 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 कारणों पर चर्चा करना क्यों संभव नहीं है और इसे लागू नहीं किया जाएगा।


76
2017-09-08 18:12



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


मैंने इसका उपयोग किया कम से कम  stdout_callback उत्तर-प्लेबुक के साथ विज्ञापन-प्रसार उत्तरदायी का उपयोग करने के लिए समान आउटपुट दिया गया।

आपके ansible.cfg में (ध्यान दें कि मैं ओएस एक्स पर हूं इसलिए संशोधित करें 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 ...

मैं उत्तर-प्लेबुक 2.2.1.0 का उपयोग कर रहा हूं


13
2018-04-06 08:12



अच्छा कॉलबैक प्लगइन, सरल पोस्ट-प्रोसेसिंग केवल मानक आउटपुट निकाल सकता है। - RichVel