Katakanlah saya menjalankan yang berikut ini.
$ 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
$
Saya tahu pasti bahwa itu berhasil.
Di mana / bagaimana saya melihat "Hello World" bergema / dicetak oleh skrip saya pada host jarak jauh (MyTestHost)? Atau kode kembali / keluar dari skrip?
Penelitian saya menunjukkan kepada saya bahwa dimungkinkan untuk menulis plugin untuk mencegat callback eksekusi modul atau sesuatu di baris tersebut dan menulis file log. Saya lebih suka tidak membuang waktu saya dengan itu.
Misalnya sesuatu seperti stdout di bawah (perhatikan bahwa saya menjalankan ansible dan bukan ansible-playbook):
$ 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"
}
$
set -x
danset +x
dalam skrip shell.no_log: True
bendera untuk mencegah perintah atau buku pedoman dari pencatatan tetapi itu sangat halus seperti yang saya yakini.logrotate
kelog_path
sehingga setiapansible
run memiliki file yang berbeda (dengan perintah / pedoman termasuk dalam file)?v
detik untuk menjadi stdout dan stderrTugas skrip playbook akan menghasilkan
stdout
seperti perintah non-playbook, hanya perlu disimpan ke variabel menggunakanregister
. Setelah kita mendapatkannya, modul debug dapat mencetak ke aliran keluaran playbook.Outputnya akan terlihat seperti ini:
sumber
Ada juga cara lain untuk menghasilkan file log.
Sebelum menjalankan
ansible-playbook
jalankan perintah berikut untuk mengaktifkan logging:Tentukan lokasi untuk file log.
Aktifkan Debug
Untuk memeriksa file log yang dihasilkan.
sumber
Plugin resmi
Anda dapat menggunakan plugin panggilan balik keluaran . Misalnya, mulai dari Ansible 2.4, Anda dapat menggunakan plugin callback keluaran debug :
(Secara alternatif, jalankan
export ANSIBLE_STDOUT_CALLBACK=debug
sebelum menjalankan playbook Anda)Penting: Anda harus menjalankan
ansible-playbook
dengan opsi-v
(--verbose
) untuk melihat efeknya. Denganstdout_callback = debug
set, hasilnya sekarang akan terlihat seperti ini:Ada modul lain selain
debug
modul jika Anda ingin keluaran diformat berbeda. Adajson
,yaml
,unixy
,dense
,minimal
, dll ( daftar lengkap ).Misalnya, dengan
stdout_callback = yaml
, hasilnya akan terlihat seperti ini:Plugin pihak ketiga
Jika tidak ada plugin resmi yang memuaskan, Anda dapat mencoba
human_log
plugin tersebut. Ada beberapa versi:https://github.com/n0ts/ansible-human_log
https://gist.github.com/cliffano/9868180
sumber
Menggunakan plugin callback, Anda dapat memiliki stdout dari keluaran perintah Anda dalam bentuk yang dapat dibaca dengan play : gist: human_log.py
sumber
Bantuan baris perintah yang memungkinkan, seperti
ansible-playbook --help
menunjukkan cara meningkatkan verbositas keluaran dengan menyetel mode verbose (-v) ke lebih banyak verbositas (-vvv) atau untuk menghubungkan debugging verbosity (-vvvv). Ini akan memberi Anda beberapa detail yang Anda cari di stdout, yang kemudian dapat Anda log.sumber