मुझे लॉग-इन / ansible-playbook मॉड्यूल के विवरण कैसे मिलते हैं?


95

कहो मैं निम्नलिखित को निष्पादित करता हूं।

$ cat test.sh
#!/bin/bash
echo Hello World
exit 0

$ cat Hello.yml
---

- hosts: MyTestHost
  tasks:
  - name: Hello yourself
    script: test.sh


$ ansible-playbook  Hello.yml

PLAY [MyTestHost] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [MyTestHost]

TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]

PLAY RECAP ********************************************************************
MyTestHost                    : ok=2    changed=0    unreachable=0    failed=0

$

मुझे यकीन है कि यह सफल था।

मुझे दूरस्थ होस्ट (MyTestHost) पर मेरी स्क्रिप्ट द्वारा "हैलो वर्ल्ड" इको'ड / प्रिंट कहां / कैसे दिखाई देता है? या स्क्रिप्ट का रिटर्न / एग्जिट कोड?

मेरे शोध से पता चलता है कि मॉड्यूल निष्पादन कॉलबैक या उन पंक्तियों पर कुछ इंटरसेप्ट करने के लिए एक प्लगइन लिखना और एक लॉग फाइल लिखना संभव होगा। मैं उस के साथ अपना समय बर्बाद नहीं करना पसंद करूंगा।

उदाहरण के लिए नीचे दिए गए स्टैडआउट की तरह कुछ (ध्यान दें कि मैं चल रहा हूं और न कि खेलने योग्य- playbook):

$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "Hello World\n"
}

$

जवाबों:


113

यदि आप -vकमांड लाइन पर झंडे को खेलने योग्य पास करने के लिए पास करते हैं , तो आपको प्रत्येक कार्य निष्पादन के लिए stdout और stderr दिखाई देगा:

$ ansible-playbook -v playbook.yaml

Ansible ने लॉगिंग के लिए अंतर्निहित समर्थन भी किया है। निम्नलिखित लाइनों को अपनी ansible कॉन्फ़िगरेशन फ़ाइल में जोड़ें :

[defaults] 
log_path=/path/to/logfile

कॉन्फ़िगर फ़ाइल के लिए कई स्थानों पर दिखेगा:

  • ansible.cfg वर्तमान निर्देशिका में जहाँ आप भागे हैं ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg

8
धन्यवाद। बस लालची: क्या मैं प्लेबुक से लॉगिंग को गतिशील रूप से शुरू / रोक सकता हूं? जैसे set -xऔर set +xएक शेल स्क्रिप्ट में।
कश्यप

@thekashyap मुझे नहीं लगता कि यह वर्तमान में संभव है।
लोरिन होचस्टेन

9
आप no_log: Trueकमांड या प्लेबुक को लॉगिंग से रोकने के लिए ध्वज का उपयोग कर सकते हैं लेकिन यह उतना ही महीन है जितना कि मुझे विश्वास है।
एडी मिलर

4
आप कृपया वर्णन किया जा सका है कि कैसे मैं रखूँ logrotateको log_pathतो हर कि ansibleरन एक अलग फ़ाइल (कमांड / प्लेबुक फ़ाइल में शामिल) के साथ है?
स्टायरोफोम

मुझे vस्टडआउट और स्टेडर प्राप्त करने के लिए तीन एस की आवश्यकता थी
अमीर

24

प्लेबुक स्क्रिप्ट टास्क stdoutनॉन-प्लेबुक कमांड की तरह ही उत्पन्न होगा , इसे सिर्फ एक वैरिएबल में सेव करना होगा register। एक बार जब हमें वह मिल जाता है, तो डिबग मॉड्यूल प्लेबुक आउटपुट स्ट्रीम पर प्रिंट कर सकता है।

tasks:
- name: Hello yourself
  script: test.sh
  register: hello

- name: Debug hello
  debug: var=hello

- name: Debug hello.stdout as part of a string
  debug: "msg=The script's stdout was `{{ hello.stdout }}`."

आउटपुट कुछ इस तरह दिखना चाहिए:

TASK: [Hello yourself] ******************************************************** 
changed: [MyTestHost]

TASK: [Debug hello] *********************************************************** 
ok: [MyTestHost] => {
    "hello": {
        "changed": true, 
        "invocation": {
            "module_args": "test.sh", 
            "module_name": "script"
        }, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "Hello World\r\n", 
        "stdout_lines": [
            "Hello World"
        ]
    }
}

TASK: [Debug hello.stdout as part of a string] ******************************** 
ok: [MyTestHost] => {
    "msg": "The script's stdout was `Hello World\r\n`."
}

लेकिन हेलो खुद टास्क ने कोई स्टडआउट नहीं दिया है
सौरभ चंद्र पटेल

यह मेरी पसंदीदा विधि है। डिबग स्टेटमेंट में पंजीकृत चर के मूल्यों का उपयोग करने में अच्छा हो और दुनिया आपकी सीप है।
जोशुआ के

14

लॉग फ़ाइल जनरेट करने का अन्य तरीका भी है।

ansible-playbookलॉगिंग को सक्षम करने के लिए निम्नलिखित कमांड चलाने से पहले :

  • लॉग फ़ाइल के लिए स्थान निर्दिष्ट करें।

    ANSIBLE_LOG_PATH = ~ / ansible.log निर्यात करें

  • डीबग सक्षम करें

    निर्यात ANSIBLE_DEBUG = सत्य

  • जाँच करने के लिए कि लॉग फ़ाइल उत्पन्न की।

    कम $ ANSIBLE_LOG_PATH


1
ANSIBLE_DEBUG लॉग फ़ाइल निर्दिष्ट करने से अलग है। यह क्रिया-चयन से भी अलग है! यह अभी भी कॉल आउट करने के लिए बहुत अच्छा है - डीबग आपको डेवलपर-उन्मुख डीबग संदेश देगा, बिल्कुल चरम क्रियात्मक स्तर पर। चारों ओर अच्छा है।
एलन एनएस

4

आधिकारिक प्लगइन्स

आप आउटपुट कॉलबैक प्लग इन का उपयोग कर सकते हैं । उदाहरण के लिए, अंसिबल 2.4 में शुरू, आप डिबग आउटपुट कॉलबैक प्लगइन का उपयोग कर सकते हैं :

# In ansible.cfg:
[defaults]
stdout_callback = debug

(पूरी तरह से, चलाओ export ANSIBLE_STDOUT_CALLBACK=debug अपनी प्लेबुक से पहले )

महत्वपूर्ण: आपको प्रभाव देखने के लिए ( ) विकल्प के ansible-playbookसाथ चलना चाहिए । सेट के साथ , आउटपुट को अब कुछ इस तरह दिखना चाहिए:-v--verbosestdout_callback = debug

TASK [Say Hello] ********************************
changed: [192.168.1.2] => {
    "changed": true,
    "rc": 0
}

STDOUT:


Hello!



STDERR:

Shared connection to 192.168.1.2 closed.

मॉड्यूल के अलावा अन्य मॉड्यूल हैं debugयदि आप चाहते हैं कि आउटपुट अलग-अलग स्वरूपित हो। वहाँ हैjson , yaml, unixy, dense, minimal, आदि ( पूरी सूची )।

उदाहरण के लिए, stdout_callback = yamlआउटपुट कुछ इस तरह दिखेगा:

TASK [Say Hello] **********************************
changed: [192.168.1.2] => changed=true 
  rc: 0
  stderr: |-
    Shared connection to 192.168.1.2 closed.
  stderr_lines:
  - Shared connection to 192.168.1.2 closed.
  stdout: |2-

    Hello!
  stdout_lines: <omitted>

तृतीय-पक्ष प्लगइन्स

यदि आधिकारिक प्लगइन्स में से कोई भी संतोषजनक नहीं है, तो आप कोशिश कर सकते हैं human_log प्लगइन की । कुछ संस्करण हैं:


3

कॉलबैक प्लग इन का उपयोग करते हुए, आप अपने कमांड आउटपुट को प्ले के साथ पढ़ने योग्य रूप में देख सकते हैं: gist: human_log.py

उदाहरण आउटपुट के लिए संपादित करें:

 _____________________________________
< TASK: common | install apt packages >
 -------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)

stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.


stderr:

start:
2015-03-27 17:12:22.132237

end:
2015-03-27 17:12:22.136859

1

उत्तर देने योग्य कमांड-लाइन सहायता, जैसे कि ansible-playbook --helpशो क्रिया मोड (-v) को अधिक वर्बोसिटी (-vvv) पर सेट करके या डिबगिंग वर्बोसिटी (-vvv) को जोड़ने के लिए आउटपुट वर्बोसिटी को कैसे बढ़ाया जाए। यह आपको कुछ विवरण आपको स्टडआउट के बाद देना चाहिए, जिन्हें आप तब लॉग इन कर सकते हैं।

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