Ansble komutlarının stdout'unu nasıl görebilirim?


165

Ansible-playbook komutları için stdout'u nasıl görebilirim? -v tek tek komutları değil, yalnızca çıktıları gösterir. Bunu hemen nasıl yapacağımı çözebilseydim çok iyi olurdu, bir şey başarısız olursa veya takılırsa nedenini görebiliyorum.

Örneğin

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

yazdırır

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

hello


Yanıtlar:


165

Bence sonucu bir değişkene kaydedebilir, sonra da hata ayıklama ile yazdırabilirsiniz.

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

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

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

26
Ek olarak, bir değişkeni doğrudan ile hata ayıklayabilirsiniz - debug: var=hello. Bazen bu, çok satırlı çıktı veya Ansible modül çıkışı için ( command/ shellçıkış yerine ) daha yararlıdır .
geerlingguy

4
Java çıktısını kullanırken sorun yaşadım. Düzeltme, Java’nın tüm çıktılarını stdout’a yönlendirmek:shell: java -version 2>&1
Matthias Braun

20
bu çok daha iyi bir şey değil, ancak yalnızca komut başarıyla tamamlandıktan sonra stdout iletisini alırsınız . Ansible'ın asıldığı yerde bir sorun yaşıyordum. Bunun nedeni, sadece asılabilir olan etkileşimli parola talebini biriktiren bir rsync komutu için yanlış kullanıcı adını kullanmamdı. Hata ayıklamak çok zordu - ama gerçekte stdout'u görebilseydim, yanlış yaptığımı hemen anlardım. Mümkünse bu işlevselliği SEVİYORUM.
Michael B

10
bu işe yarar olsa da, mantıklı hata ayıklamayı gerçekten zorlaştırıyor demektir. İlk görevin hiç bitmeyeceğini hayal edelim (belki de aptalca kullanıcı girişi için bekliyordur) ... kullanıcının asla bilmeyeceği! Dahası, registermodül veya her ne ise, değişken kümesine stdoutveya stderrdeğişken kümesine sahip nesneler üretmiyor ... bu nedenle çıktıyı varsayılan olarak yalnızca almamız gerçekten kötü: |
vlad-ardelean

96

Yerine stdout kullanıyorum öneririm stdout_lines . Çok satırlı çıktılar için bu çok daha güzel, örneğin

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

verir

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"
        ]
    }
}

Hata ayıklama amacıyla gerçek zamanlı çıkışını İlişkin kapalı bir hata raporu vardır https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 bu mümkün değildir ve uygulamaya olmayacak nedenlerini tartışırken.


16
"Gerçek zamanlı çıktı" hatasını bağlamak için +1.
ntc2

Out.stdout_lines (Ansible mail görevinin gövdesi olarak) göndermek istersem, e-posta alındığında böyle görünmemesi için nasıl gönderebilirim? [toplam 61 ', u'lrwxrwxrwx 1 kök kökü 7 Şub 15 2015 bin -> usr / bin', u'drxxr-xr-x 6 kök kök 1024 Ağustos 24 22:08 boot ', u' .... . '] Terminalde görüldüğü gibi bu şekilde görünmesini istiyorum
Chris F

ölümcül: [127.0.0.1]: BAŞARISIZ! => {"reason": "YAML yüklenirken sözdizimi hatası. \ n beklenen bulunamadı <belge başlangıcı> \ n \ nBu hata ... sözdizimi sorunu gibi görünüyor. \ n \ nBaşkınlık çizgisi şunun gibi görünüyor: \ n \ n \ n ismi: Run ls.sh ve çıkış \ "ls / \" \ n ^ burada \ n "}
Nate

20

Ben kullanarak bulundu minimum stdout_callback , anlık yanıtlayıcı 'kullanmaya benzer çıktı vermiştir yanıtlayıcı'-başucu kitabıyla.

Ansible.cfg dosyanızda (OS X’te olduğumu ve bu nedenle callback_pluginskurulumunuza uygun olan yolu değiştirin )

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

Böylece böyle bir görev

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

Geçici bir komut gibi, bunun gibi çıktılar verir.

example | SUCCESS | rc=0 >>
hi ...

Ansible-playbook 2.2.1.0 kullanıyorum


Güzel geri arama eklentisi, basit işlem sonrası sadece standart çıktı ayıklayabilirsiniz.
RichVel
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.