4

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

4

1 に答える 1