■ debug モジュール
- debug:
msg: "{{ var1 }}"
のようにすると var1
変数の内容が 表示されます。
公式ドキュメント
debug – Print statements during execution — Ansible Documentation
■ -v オプション
ansible-playbook
コマンドの -v
オプションでデバッグ的な情報が画面に表示されるようになります。
-v
、-vv
、-vvv
といったように、 v
の数が多いほど詳細な表示となります。
■ --step でステップ実行
playbook 中のタスクを一つ一つステップ実行していきたい場合はありませんでしょうか。
ansible-playbook
コマンドに --step
オプションを指定することでステップ実行ができます。
実行例
[vagrant@centos7 vagrant]$ ansible-playbook j_command.yml --step
PLAY [172.16.0.3] *******************************************************************************************************************
Perform task: TASK: show version (N)o/(y)es/(c)ontinue: y ← 入力待ちになるので y で続行
Perform task: TASK: show version (N)o/(y)es/(c)ontinue: *****************************************************************************
TASK [show version] *****************************************************************************************************************
ok: [172.16.0.3]
Perform task: TASK: debug result (N)o/(y)es/(c)ontinue: y ← 入力待ちになるので y で続行
Perform task: TASK: debug result (N)o/(y)es/(c)ontinue: *****************************************************************************
TASK [debug result] *****************************************************************************************************************
ok: [172.16.0.3] => {
"msg": {
"changed": false,
"failed": false,
"stdout": [
"Hostname: vsrx3\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]"
],
"stdout_lines": [
[
"Hostname: vsrx3",
"Model: firefly-perimeter",
"JUNOS Software Release [12.1X47-D15.4]"
]
]
}
}
PLAY RECAP **************************************************************************************************************************
172.16.0.3 : ok=2 changed=0 unreachable=0 failed=0
公式ドキュメント
Start and Step — Ansible Documentation
■ debug strategy
Ansible 2.1 から標準で利用可能になった strategy plugin です。
Playbook失敗時に、デバッガモードになり、変数の値の確認、再代入、タスクの再実行などが可能になります。
debug strategy を利用するには、playbookの最初のほうで、 strategy: debug
と指定しておきます。
---
- hosts: junos
strategy: debug
gather_facts: no
connection: local
(2018/04/07 追記)
また、Ansible 2.5 から debugger
というキーワード利用することで、デバッガーを起動する条件も指定できるようになりました。
例えば、失敗時だけでなく、常にデバッガーを起動する場合は、以下のように debugger: always
と指定します。
---
- hosts: junos
debugger: always
gather_facts: no
connection: local
(参考)
Ansible の Playbook Debugger を常に起動させる方法(Ansible 2.5 から) - てくなべ (tekunabe)
実行例
ここでは、Juniperのネットワーク機器へのパスワードが間違っていたため、ログインできずにデバッガーが起動し、
正しいパスワードを指定して、タスクの再実行をしています。
[vagrant@centos7 vagrant]$ ansible-playbook j_command.yml
PLAY [172.16.0.3] ********************************************************************************************
TASK [show version] ******************************************************************************************
fatal: [172.16.0.3]: FAILED! => {"changed": false, "failed": true, "msg": "unable to open shell. Please see: https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell"}
Debugger invoked # ★デバッガ起動
(debug) p vars["provider"]["password"] # ★ パスワードの確認
u'xxxxxxxxxx'
(debug) vars["provider"]["password"] = "password" # ★ 正しいパスワードを指定
(debug) redo # ★ タスクの再実行(成功)
ok: [172.16.0.3]
TASK [debug result] ******************************************************************************************
ok: [172.16.0.3] => {
"msg": {
"changed": false,
"failed": false,
"stdout": [
"Hostname: vsrx3\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]"
],
"stdout_lines": [
[
"Hostname: vsrx3",
"Model: firefly-perimeter",
"JUNOS Software Release [12.1X47-D15.4]"
]
]
}
}
PLAY RECAP ***************************************************************************************************
172.16.0.3 : ok=2 changed=0 unreachable=0 failed=0
公式ドキュメント
Playbook Debugger — Ansible Documentation
■ --syntax-check で YMAL文法チェック
playbookを実行せずに、純粋にYMALとしての文法チェックができます。
実行例(文法OK)
[vagrant@centos7 files]$ ansible-playbook j_command.yml --syntax-check
playbook: j_command.yml
実行例(文法NG)
[vagrant@centos7 files]$ ansible-playbook j_command.yml --syntax-check
ERROR! Syntax Error while loading YAML.
The error appears to have been in '/vagrant/j_command.yml': line 10, column 20, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: show version
junos_command:
^ here
exception type: <class 'yaml.scanner.ScannerError'>
exception: mapping values are not allowed here
in "<unicode string>", line 10, column 20:
junos_command:
^
公式ドキュメント
Intro to Playbooks — Ansible Documentation