שאלה איך לראות stdout של פקודות ansible?


כיצד ניתן לראות stdout לפקודות ansible-playbook? -v רק מציג פלט ansible, לא פקודות בודדות. זה יהיה נהדר אם אני יכול להבין איך לעשות את זה מיד, אז אם משהו נכשל או תלוי אני יכול לראות למה.

למשל

- 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


תשובות:


אני חושב שאתה יכול לרשום את התוצאה למשתנה, ולאחר מכן להדפיס עם debug.

- 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. לפעמים זה מועיל יותר עבור פלט multiline או פלט מודול Ansible (במקום command/shell פלט). - geerlingguy
היה לי קשה לקבל פלט Java באמצעות זה. התיקון הוא לנתב מחדש את כל הפלט של Java ל- stdout: shell: java -version 2>&1 - Matthias Braun
זה הרבה יותר טוב, אבל אתה מקבל רק את ההודעה stdout לאחר הפקודה הושלמה בהצלחה. היתה לי בעיה שבה נראה כי ניתן לתלות. הסיבה היתה שאני משתמש בשם המשתמש שגוי עבור הפקודה rsync, אשר סלול הבקשה סיסמה אינטראקטיבית, אשר פשוט נתלה ansible. זה היה מאוד קשה באגים - אבל אם אני יכול לראות stdout בזמן אמת, הייתי מיד הבנתי מה עשיתי לא בסדר. אני אוהב את הפונקציונליות הזו, אם אפשר. - Michael B
בעוד זה עובד, זה אומר ansible עושה באגים באמת קשה. בואו נדמיין את המשימה הראשונה אף פעם לא מסתיימת (אולי זה מחכה בטיפשות קלט המשתמש) ... המשתמש לעולם לא יודע! יתר על כן, register מודול, או מה שזה לא יהיה לייצר אובייקטים שיש להם את stdout או stderr משתנה .... אז זה ממש רע שאנחנו לא מקבלים רק את הפלט כברירת מחדל: | - vlad-ardelean


במקום סטדוט הייתי מציע להשתמש 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
אם אני רוצה לשלוח את out.stdout_lines (כמו גוף של משימה דואר Ansible), איך אני יכול לשלוח את זה אז זה לא נראה ככה כאשר הדוא"ל מתקבל? [u'total 61 ', u'lrwxrwxrwx 1 שורש שורש 7 Feb 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 שורש שורש 1024 Aug 24 22:08 boot ', u' .... ''] אני רוצה שזה ייראה כך, כפי שנראה על הטרמינל - Chris F


מצאתי באמצעות מינימלי  stdout_callback עם ansible-playbook נתן פלט דומה באמצעות אד-הוק ansible.

ב 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


13
2018-04-06 08:12



נחמד plugback plugin, פשוט שלאחר עיבוד יכול לחלץ פלט רגיל בלבד. - RichVel