Yanıtlanabilir oyun kitabı modül çalıştırmalarının günlüklerini / ayrıntılarını nasıl alabilirim?


96

Aşağıdakileri uyguladığımı söyle.

$ 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

$

Başarılı olduğundan eminim.

Uzak ana bilgisayarda (MyTestHost) komut dizim tarafından yankılanan / yazdırılan "Merhaba Dünya" yı nerede / nasıl görebilirim? Veya komut dosyasının dönüş / çıkış kodu?

Araştırmam, modül yürütme geri aramalarını veya bu satırlarda bir şeyi engellemek için bir eklenti yazmanın ve bir günlük dosyası yazmanın mümkün olduğunu gösteriyor. Bununla zamanımı boşa harcamamayı tercih ederim.

Örneğin, aşağıdaki standart gibi bir şey (yanıtlanabilir oyun kitabını değil, yanıtlayıcı çalıştırdığımı unutmayın):

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

$

Yanıtlar:


115

Eğer geçerseniz -vkomut satırında yanıtlayıcı '-oyun metnini bayrak, idam her görev için stdout ve stderr görürsünüz:

$ ansible-playbook -v playbook.yaml

Ansible ayrıca günlük kaydı için yerleşik desteğe sahiptir. Yanıtlanabilir yapılandırma dosyanıza aşağıdaki satırları ekleyin :

[defaults] 
log_path=/path/to/logfile

Ansible, yapılandırma dosyası için birkaç yere bakacaktır:

  • ansible.cfg koştuğunuz mevcut dizinde ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg

8
Teşekkürler. Açgözlülük: Bir oyun kitabından dinamik olarak günlük kaydını başlatabilir / durdurabilir miyim? Bir kabuk komut dosyası gibi set -xve set +xiçinde.
Kashyap

@thekashyap Bunun şu anda mümkün olduğunu düşünmüyorum.
Lorin Hochstein

9
no_log: TrueBir komutun veya başucu kitabının günlüğe kaydedilmesini önlemek için bayrağı kullanabilirsiniz, ancak bu inandığım kadar ince taneli.
Ade Miller

4
Her çalıştırmanın farklı bir dosyaya sahip olması logrotateiçin nasıl koyacağımı (dosyada bulunan komut / oynatma kitabıyla) açıklayabilir misiniz ? log_pathansible
strafor uçmak

vStdout ve stderr için üç saniyeye ihtiyacım vardı
zengin

24

Playbook komut dosyası görevi stdouttıpkı playbook olmayan komut gibi oluşturulacak, sadece kullanılarak bir değişkene kaydedilmesi gerekiyor register. Bunu aldıktan sonra, hata ayıklama modülü başucu kitabı çıktı akışına yazdırabilir.

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

Çıktı şunun gibi görünmelidir:

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

ama kendinize merhaba görevi herhangi bir standart vermedi
Saurabh Chandra Patel

Bu benim tercih ettiğim yöntemdir. Kayıtlı değişkenlerin değerlerini hata ayıklama ifadelerinde kullanmakta ustalaşın ve dünya sizin istiridyenizdir.
Joshua K

16

Günlük dosyası oluşturmanın başka bir yolu da vardır.

ansible-playbookÇalıştırmadan önce , günlüğe kaydetmeyi etkinleştirmek için aşağıdaki komutları çalıştırın:

  • Günlük dosyası için konumu belirtin.

    dışa aktar ANSIBLE_LOG_PATH = ~ / ansible.log

  • Hata Ayıklamayı Etkinleştir

    dışa aktar ANSIBLE_DEBUG = Doğru

  • Oluşturulan günlük dosyasını kontrol etmek için.

    daha az $ ANSIBLE_LOG_PATH


1
ANSIBLE_DEBUG, bir günlük dosyası belirtmekten farklıdır. Ayrıntı seçiminden bile ayrı! Bu yine de belirtmek için çok iyi - hata ayıklama, kesinlikle aşırı ayrıntı düzeyinde geliştirici odaklı hata ayıklama mesajları verecektir. Etrafta olması güzel.
AlanSE

4

Resmi eklentiler

Çıktı geri arama eklentilerini kullanabilirsiniz . Örneğin, Ansible 2.4'ten başlayarak, hata ayıklama çıktısı geri arama eklentisini kullanabilirsiniz:

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

(Alternatif olarak, başucu kitabınızı çalıştırmadan export ANSIBLE_STDOUT_CALLBACK=debugönce çalıştırın)

Önemli: çalıştırmalısınız ansible-playbookile -v( --verboseetkisini görmek için) seçeneğiyle. stdout_callback = debugSet ile çıktı şimdi şöyle görünmelidir:

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

STDOUT:


Hello!



STDERR:

Shared connection to 192.168.1.2 closed.

debugÇıkışın farklı biçimlendirilmesini istiyorsanız, modülün dışında başka modüller de vardır . Orada json, yaml, unixy, dense, minimal, vb ( tam liste ).

Örneğin, ile stdout_callback = yamlçıktı şu şekilde görünecektir:

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>

Üçüncü taraf eklentiler

Resmi eklentilerin hiçbiri tatmin edici değilse, human_logeklentiyi deneyebilirsiniz . Birkaç versiyon var:


3

Geri arama eklentilerini kullanarak, komutlarınızın stdout'unun play : gist: human_log.py ile okunabilir biçimde çıktısını alabilirsiniz.

Örnek çıktı için düzenleyin:

 _____________________________________
< 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 --helpAyrıntılı modu (-v) daha fazla ayrıntıya (-vvv) veya bağlantı hata ayıklama ayrıntısına (-vvvv) ayarlayarak çıktı ayrıntı düzeyinin nasıl artırılacağını gösterir gibi yanıtlanabilir komut satırı yardımı . Bu size stdout'ta aradığınız bazı ayrıntıları vermeli ve daha sonra oturum açabilirsiniz.

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.