Soru Sesli komutların stdout'u nasıl görebilirim?


Anlaşılabilir oyun kitabı komutları için stdout'u nasıl görebilirim? -v sadece bireysel komutları değil, uygulanabilir bir çıkışı gösterir. Bunu hemen nasıl yapacağımı anlayabilmem harika olurdu, eğer bir şey başarısız olursa ya da asılı kalırsa nedenini görebilirim.

Örneğin.

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

yazdırır

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

hello

124
2017-09-06 21:01


Menşei


ilgili: serverfault.com/questions/667252/... - Capi Etheriel
stackoverflow.com/questions/20563639/... - JonnyJD


Cevaplar:


Bence sonucu bir değişkene kaydedebilir, ardından hata ayıkla yazdırabilirsiniz.

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

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

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

126
2017-09-14 13:01



Ayrıca, doğrudan bir değişkenle hata ayıklayabilirsiniz. - debug: var=hello. Bazen bu çok satırlı çıkış veya Ansible modül çıkışı için daha yararlıdır command/shell çıktı). - geerlingguy
Bunu kullanarak Java çıktı almada sorun yaşadım. Düzeltme, tüm Java’nın çıktısını stdout’a yönlendirmektir: shell: java -version 2>&1 - Matthias Braun
Bu çok daha iyi bir şey değil, ama sadece stdout mesajını aldınız sonra komut başarıyla tamamlandı. Asistanın asılacağı bir sorun yaşıyordum. Bunun sebebi, rsync komutunun yanlış kullanıcı adını kullanmam oldu. Hata ayıklamak çok zordu - ama gerçek zamanlı olarak stdout'u görebilseydim, yanlış yaptığımı hemen anlardım. Mümkünse bu işlevselliği SEVİYORUM. - Michael B
Bu işe yarıyorsa, bu mantıklı hata ayıklama gerçekten zor kılan anlamına gelir. İlk işin asla bitmediğini hayal edelim (belki de kullanıcı girişi için aptalca beklemekte) ... kullanıcı asla bilmeyecek! Üstelik register modülü veya her neyse, stdout veya stderr değişken set .... bu yüzden biz sadece varsayılan olarak çıktı almıyoruz gerçekten kötü: | - vlad-ardelean


Yerine stdout'u Kullanmanızı öneririm stdout_lines. Çok satırlı çıktı için bu çok daha iyi, örn.

- 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 amaçlı gerçek zamanlı çıktıyla ilgili olarak, kapalı bir hata raporu var https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 Bunun neden mümkün olmadığını tartışmak ve uygulanmayacak.


76
2017-09-08 18:12



"Gerçek zamanlı çıktı" hatasını bağlamak için +1. - ntc2
Out.stdout_lines (Ansible mail görevinin gövdesi olarak) göndermek istiyorsam, e-posta alındığında böyle görünmeyecek şekilde nasıl gönderebilirim? [u'total 61 ', u'lrwxrwxrwx 1 kök kökü 7 Feb 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 kök kökü 1024 Ağustos 24 22:08 önyükleme ', u' .... . ”Terminalde görüldüğü gibi, bunun böyle olmasını istiyorum. - Chris F


Kullanarak buldum en az  stdout_callback ansible-playbook ile ad-hoc ansible kullanarak benzer çıktı verdi.

Senin ansible.cfg (Ben OS X üzerinde olduğumu unutmayın. callback_plugins kurulumunuza uygun yol)

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 ..."

Bu şekilde çıktı verir, ad hoc komut gibi

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

Ben kullanabiliyorum-playbook 2.2.1.0 kullanıyorum


13
2018-04-06 08:12



Nice geri arama eklentisi, basit post-processing sadece standart çıktıyı çıkarabilir. - RichVel