Ansible ile ekran çıkışı


37

Bir var pgBouncer için yanıtlayıcı 'oyununu bir istatistiklerimden görüntüler bazı çıkış pgBouncer yerleşik modülü mü.

Benim sorunum, Ansible çıktıyı terminale yazdırdığında yeni satırları yönetmesidir. Görmek yerine

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

anlıyorum

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

Ansible'ın çıktıyı "güzel bir şekilde basmak" için nasıl bir baskı yapılacağını bilen var mı?

Yanıtlar:


14

Ansible'da yerel olarak istediğinizi yapmanın bir yolu yok. Bunu bir geçici çözüm olarak yapabilirsiniz:

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

1
OSX'te kullanmak zorunda kaldım sed -e 's/\\n/'$'\\\n/g'. Ayrıca alakalı: comicjk.com/20
Navin

4
sorins cevaplarını görün serverfault.com/a/846232/240508 bu 2017 yılında doğru olanı cevaplayabilir> 2.3
Vadimo

Çoğunlukla \nsize ayıklama mesajında bu Regexp'i kullanabilirsiniz böylece, sonuç görüntülenir:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

61

Daha fazla insan dostu çıktı istiyorsanız:

ANSIBLE_STDOUT_CALLBACK=debug

Bu yanıtlayıcı 'kullanım (önceden adlandırılmış ayıklama çıkış modülü yapacak human_logwhinch) onun talihsiz ismi rağmen daha az ayrıntılı ve çok daha kolay insanlar tarafından okumaktır.

Bu modülün mevcut olmadığı konusunda bir hata alırsanız, Ansible'ı yükseltin ya da yerel olarak bu modülü ekleyin.

Bunu yapılandırmak için başka bir seçenek stdout_callback = debugansible.cfg dosyasına eklemektir.


13
Bu , 2017'de KABUL EDİLDİ cevap olmalı , insan dostu log çıktısı kutudan çıkarıldı.
Vadimo

1
İşte bunu daha kalıcı hale getirmek için birkaç ipucu: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
Veya ANSIBLE_STDOUT_CALLBACK=yaml. fail msgBir nesneyi sağladığımda güzel biçimlendirdiği için tercih ederim .
Marinos An

13

Geri arama eklentisi kullanabilirsiniz . Bu, çıktınızı yeniden ayrıştırır ve kolayca açılıp kapanır.


2
Not: ansible 2.0.x CallbackBaseile from ansible.plugins.callback import CallbackBasegeri çağırma sınıfının çalışması için içe aktarılandan devralmanız gerekir .
allo

12

Ansible Project grup forumunda bu şekilde bulundu :

- 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') }}"

Temel olarak bunu yenile ayırıp ardından listeyi yazdırarak listeye dönüştürüyoruz.


Bu kabuk çıktısını daha okunaklı hale getirir! Güzel!
Asfand Qazi,

Bu çözümün büyük bir dezavantajı var gibi gözüküyor - "Örnek test" modülünün çalışması başarısız olursa, genellikle tüm oyun kitabı derlemesi başarısız olur ve biçimlendirilmiş çıktıyı, özellikle muhtemelen en ilginç olanı stderr için olanı asla görmezsiniz.
René,

@ René, haklısın. Bunun ignore_errors: yesiçin orijinal komuta ve daha sonra `- assert: that:" test.rc == 0 "gibi bir şey ekleyebilirsiniz .
jhutar


0

Standart çıktıyı taklit eden bir formatta görmek istiyorsanız, aşağıdaki gibi Ansible 2.7+ debugiçindeki debugmodül ile geri çağırma eklentisini kullanabilirsiniz :

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.