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

时间:2015-01-09 03:42:35

标签: handler ansible

我试图运行我的第一个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版本似乎缺少配置文件。

1 个答案:

答案 0 :(得分:3)

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

由于处理程序是角色的一部分。

说明:

  • 您不应该使用处理程序,因为每次调用此playbook时都会将行粘贴到/etc/environment。我会推荐lineinefile模块。

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

  • 的决定