2015-01-09 34 views
1

我試圖運行我的第一個劇本,在四臺服務器上安裝Java,隨後定義一個JAVA_HOME環境變量。Ansible錯誤更改處理程序未定義

ansible-playbook site.yml --check 
PLAY [crave_servers] ********************************************************** 

GATHERING FACTS *************************************************************** 
ok: [54.174.151.196] 
ok: [54.174.197.35] 
ok: [54.174.207.83] 
ok: [54.174.208.240] 

TASK: [java | install Java JDK] *********************************************** 
changed: [54.174.197.35] 
changed: [54.174.151.196] 
changed: [54.174.208.240] 
changed: [54.174.207.83] 
ERROR: change handler (setvars) is not defined 

我已經把我的site.yml在/ etc/ansible

--- 
- hosts: crave_servers 
    remote_user: ubuntu 
    sudo: yes 
    roles: 
    - java 

我已經放在在/ etc/ansible/JAVA /任務

--- 
- name: install Java JDK 
    apt: name=default-jdk state=present 
    notify: 
    - setvars 

main.yml我已將main.yml放在/ etc/ansible/handlers下

--- 
- name: setvars 
    shell: echo "JAVA_HOME=\"/usr/lib/jvm/java-7-openjdk-amd64\"" >> /etc/environment 

Now我不確定句法是否是我的處理程序的結構是正確的。但從輸出中可以看出,Ansible能夠找到正確的角色並執行正確的任務。但是任務找不到處理程序。 沒有人似乎有同樣的問題。我真的不知道如何調試它,因爲我的可靠版本似乎缺少配置文件。

回答

3

你應該把你的處理程序/etc/ansible/java/handlers/main.yml

由於處理程序是一個角色的一部分。

備註:

  • 你不應該用你的處理器,因爲它會行每次調用這個劇本時粘貼到/etc/environment。我會推薦lineinefile模塊。

  • 你應該重新考慮你的決定將ansible劇本到/etc

+0

謝謝你對你的答案要加倍努力。你是正確的,使用shell的處理程序不是冪等的,我只是想在模塊不存在的情況下調查Ansible的shell功能。 –

相關問題