डिस्प्ले आउटपुट के साथ


38

मेरे पास PGBouncer के लिए एक Ansible प्ले है जो PGBouncer में निर्मित एक आँकड़े मॉड्यूल से कुछ आउटपुट प्रदर्शित करता है।

मेरा मुद्दा यह है कि जब आंसिबल टर्मिनल को प्रिंट करता है तो यह नईलाइन्स को मांगता है। देखने के बजाय

----------
| OUTPUT |
----------

समझा

----------\n| OUTPUT |\n----------

क्या किसी को पता है कि आउटपुट को "सुंदर प्रिंट" कैसे प्राप्त किया जा सकता है?

जवाबों:


14

ऐसा करने का कोई तरीका नहीं है कि आप मूल रूप से Ansible में क्या चाहते हैं। आप इसे वर्कअराउंड के रूप में कर सकते हैं:

ansible-playbook ... | sed 's/\\n/\n/g'

1
OSX पर मुझे उपयोग करना था sed -e 's/\\n/'$'\\\n/g'। इसके अलावा प्रासंगिक: comicjk.com/20
नवीन

4
sorins जवाब देखने serverfault.com/a/846232/240508 जो 2017 में सही और ansible> 2.3 है
Vadimo

अधिकतर \nपरिणाम में दिखाई देते हैं, इसलिए आप अपने डीबग संदेश में इस regexp का उपयोग कर सकते हैं:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

62

यदि आप अधिक मानव अनुकूल उत्पादन परिभाषित करना चाहते हैं:

ANSIBLE_STDOUT_CALLBACK=debug

यह डिबग आउटपुट मॉड्यूल (पहले नामित नाम human_log) का उपयोग करने के बावजूद इसका दुर्भाग्यपूर्ण नाम कम क्रिया है और मनुष्यों द्वारा पढ़ने में बहुत आसान है।

यदि आपको कोई त्रुटि मिलती है कि यह मॉड्यूल उपलब्ध नहीं है, तो Ansible को अपग्रेड करें या स्थानीय रूप से इस मॉड्यूल को जोड़ें यदि आप ansible को अपग्रेड नहीं कर सकते हैं, तो यह 2.0 या probaly जैसे 1.9 के भी अधिक संस्करणों के साथ काम करेगा।

इसे कॉन्फ़िगर करने का एक अन्य विकल्प stdout_callback = debugआपके ansible.cfg में जोड़ना है


13
यह ACCEPTED उत्तर होना चाहिए 2017 में मानव अनुकूल लॉग आउटपुट बॉक्स से बाहर भेज दिया गया है।
वडिमो

1
यहाँ इसे और अधिक स्थायी बनाने के लिए कुछ और सुझाव दिए गए हैं: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
या ANSIBLE_STDOUT_CALLBACK=yaml। मैं इसे पसंद करता हूं क्योंकि fail msgजब मैं कोई वस्तु प्रदान करता हूं तो यह अच्छा होता है।
मैरिनो ए

13

आप कॉलबैक प्लगइन का उपयोग कर सकते हैं । यह आपके आउटपुट को फिर से पार्स कर देगा और आसानी से चालू और बंद हो जाएगा।


2
नोट: काम करने योग्य 2.0.x के साथ आपको कॉलबैक वर्ग के साथ काम करने के लिए CallbackBaseआयातित से विरासत में प्राप्त करने की आवश्यकता है from ansible.plugins.callback import CallbackBase
एलो

12

इस तरह से Ansible Project समूह फोरम में मिला :

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

हम मूल रूप से इसे न्यूलाइन द्वारा विभाजित करके और फिर उस सूची को प्रिंट करके सूची में बदल देते हैं।


यह शेल आउटपुट को अधिक सुपाठ्य बनाता है! अच्छा!
असफंद काजी

इस समाधान में एक बड़ी खामी दिखाई देती है - यदि "उदाहरण परीक्षण" मॉड्यूल का निष्पादन विफल हो जाता है, तो आमतौर पर पूरी प्लेबुक बिल्ड विफल हो जाती है और आप कभी भी स्वरूपित आउटपुट नहीं देखेंगे, विशेष रूप से स्टेडर के लिए जो शायद सबसे दिलचस्प है।
Ren

@ ठीक है आप सही हैं। उसके लिए आप ignore_errors: yesमूल कमांड में जोड़ सकते हैं और बाद में `- मुखर: ':" test.rc == 0 "जैसे कुछ।
jhutar

1

आप ठहराव मॉड्यूल का उपयोग कर सकते हैं :

- pause:
    prompt: "{{ variable_blob.stdout }}"

मिनट या सेकंड को परिभाषित किए बिना इनपुट पर चलता है लेकिन तब उपयोगकर्ता इनपुट कैप्चर नहीं किया जाता है।

साभार: https://github.com/ansible/ansible/issues/17446#issuecomment-245391682


0

यदि आप इसे एक ऐसे प्रारूप में देखना चाहते हैं जो व्यावहारिक रूप से मानक आउटपुट की नकल करता है, तो आप इस तरह से Ansible 2.7+ में मॉड्यूल के debugसाथ कॉलबैक प्लगइन का उपयोग कर सकते हैं debug:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.