Handler 未定义Ansible错误更改处理程序

Handler 未定义Ansible错误更改处理程序,handler,ansible,Handler,Ansible,我正在尝试运行我的第一个playbook,在四台服务器上安装Java,然后定义一个Java_HOME环境变量 ansible-playbook site.yml --check PLAY [crave_servers] ********************************************************** GATHERING FACTS ***************************************************************

我正在尝试运行我的第一个playbook,在四台服务器上安装Java,然后定义一个Java_HOME环境变量

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
我已将main.yml放在/etc/ansible/java/tasks下

---
- name: install Java JDK
  apt: name=default-jdk state=present
  notify:
     - setvars
我已将main.yml置于/etc/ansible/handlers下

---
- name: setvars
  shell:  echo "JAVA_HOME=\"/usr/lib/jvm/java-7-openjdk-amd64\"" >> /etc/environment
现在我不确定我的处理程序的语法结构是否正确。但从输出中可以明显看出,Ansible能够找到正确的角色并执行正确的任务。但是任务找不到处理程序。
似乎没有其他人有同样的问题。我真的不知道如何调试它,因为我的ansible版本似乎缺少配置文件。

您应该将处理程序放到
/etc/ansible/java/handlers/main.yml

As处理程序是角色的一部分

备注:

  • 您不应该使用处理程序,因为它会在每次调用此剧本时将该行粘贴到
    /etc/environment
    。我推荐这个模块

  • 您应该重新考虑将ansible剧本放入
    /etc


感谢您在回答中多做了一点努力。您是对的,使用shell的处理程序不是幂等的,我只是想在模块不存在的情况下研究Ansible的shell功能。