2015-01-09 29 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功能。 –

相关问题