Ansible Log
Dec 16, 2020
Log
在執行ansible的時候,常常會需要去追蹤執行ansible的訊息。確認為什麼失敗,哪邊出問題了。
之前曾經使用tee來紀錄log。但這樣的方式會讓ansible的訊息都沒有顏色,相較於之前有顏色的時候,閱讀起來會比較困難。
ansible-playbook -i host.cfg test.yml | tee /var/log/ansible.log
之後去谷歌了一下,ansible本身是支援log的。
只要修改ansible.cfg裡面的設定,將log_path打開並設定路徑。
[defaults]
log_path=/path/to/logfile
ansible.cfg
直接從執行ansible-playbook
的當前目錄取得~/.ansible.cfg
/etc/ansible/ansible.cfg
使用log記下部署過程雖然方便,但有時候我們會在部署過程使用密碼等敏感資訊時,可以使用no_log的設定,將原本會輸出的訊息隱藏起來。
test.yml
- hosts: all
tasks:
- name: 'test no_log False'
shell: echo 'yes Log' - name: 'test no_log True'
no_log: True
shell: echo 'no Log'
host.cfg
[all]
localhost ansible_ssh_user="<user>" ansible_ssh_pass="<password>"
以上為測試的host config與tasks,執行結果如下。記得加上 -v 才會顯示echo 的資訊。
$ ansible-playbook -v -i host.cfg test.ymlPLAY [all] ************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************
ok: [localhost]TASK [test no_log False] **********************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo 'yes Log'", "delta": "0:00:00.004612", "end": "2020-12-16 13:52:00.638348", "rc": 0, "start": "2020-12-16 13:52:00.633736", "stderr": "", "stderr_lines": [], "stdout": "yes Log", "stdout_lines": ["yes Log"]}TASK [test no_log True] ***********************************************************************************************
changed: [localhost] => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": true}PLAY RECAP ************************************************************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0