ansible は Role Default 変数を同じ Role 内のハンドラーに渡しますか?
問題のあるプレイブックの最小限の抜粋を次に示します。
役割階層
- playbook.yml
- roles/
- gunicorn/
- defaults/
- main.yml
- handlers/
- main.yml
- code-checkout/
- tasks/
- main.yml
ファイルの中身はこちら
ガンコーン/デフォルト/main.yml
---
gu_log: "/tmp/gunicorn.log"
ガンコーン/ハンドラー/main.yml
---
- name: Clear Gunicorn Log
shell: rm {{ gu_log }}
ファイナライズ/タスク/main.yml
---
- name: Test Handlers
shell: ls
notify:
- Restart Gunicorn
playbook.yml
---
- name: Deploy
hosts: webservers
tasks:
- include: roles/finalize/tasks/main.yml
handlers:
- include: roles/gunicorn/handlers/main.yml
私の知る限り、すべてが良さそうです。ただし、プレイブックの実行中にこのエラーが発生します
失敗した!=> {"failed": true, "msg": "フィールド 'args' に無効な値があり、未定義の変数が含まれているようです。エラーは次のとおりです: 'gu_log' is undefined\n\nエラーは次のように表示されます「/roles/gunicorn/handlers/main.yml」: 行 3、列 3 にありますが、正確な構文の問題によっては\nファイルの別の場所にある可能性があります。\n\n問題のある行は次のようです:\n\ n\n- 名前: Gunicorn を再起動します\n ^ ここ\n"}
Ubuntu 12.04 LTS での Ansible 2.2 の使用
これは、すべてのディレクトリを作成し、私の問題を示すtechrafのスクリプトの修正版です
#!/bin/bash
mkdir -p ./rtindru-test/roles/gunicorn
mkdir -p ./rtindru-test/roles/gunicorn/defaults
mkdir -p ./rtindru-test/roles/gunicorn/handlers
mkdir -p ./rtindru-test/roles/finalize/tasks
cat >./rtindru-test/roles/finalize/tasks/main.yml <<HANDLERS_END
---
- name: Test Handlers
shell: rm {{ gu_log }}
HANDLERS_END
cat >./rtindru-test/roles/gunicorn/handlers/main.yml <<HANDLERS_END
---
- name: Clear Gunicorn Log
shell: rm {{ gu_log }}
HANDLERS_END
cat >./rtindru-test/roles/gunicorn/defaults/main.yml <<DEFAULTS_END
---
gu_log: "/tmp/gunicorn.log"
DEFAULTS_END
cat >./rtindru-test/playbook.yml <<PLAYBOOK_END
---
- name: Deploy
hosts: localhost
tasks:
- include: roles/finalize/tasks/main.yml
handlers:
- include: roles/gunicorn/handlers/main.yml
PLAYBOOK_END
touch /tmp/gunicorn.log
ls -l /tmp/gunicorn.log
ansible-playbook ./rtindru-test/playbook.yml
ls -l /tmp/gunicorn.log
出力
遊ぶ [展開]
タスク [セットアップ] ************************************************** ******************** OK: [localhost]
TASK [テストハンドラ] ********************************************* ************** 致命的: [localhost]: 失敗しました! => {"failed": true, "msg": "フィールド 'args' に無効な値があり、未定義の変数が含まれているようです。エラーは次のとおりです: 'gu_log' is undefined\n\nエラーは次のように表示されます「/rtindru-test/roles/finalize/tasks/main.yml」: 行 2、列 3 にありますが、正確な構文の問題によっては、\nファイルの別の場所にある可能性があります。\n\n問題のある行は:\n\n---\n- name: Test Handlers\n ^ here\n"} 再試行するには、 --limit @/rtindru-test/playbook.retry を使用します
再生の要約 **************************************************** ********************* localhost : ok=1 変更済み=0 到達不能=0
失敗=1