【问题标题】:Ansible error change handler is not defined未定义 Ansible 错误更改处理程序
【发布时间】:2015-01-09 03:42:35
【问题描述】:

我正在尝试运行我的第一个剧本以在四台服务器上安装 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 版本似乎缺少配置文件。

【问题讨论】:

    标签: handler ansible


    【解决方案1】:

    你应该把你的处理程序放到/etc/ansible/java/handlers/main.yml

    因为处理程序是角色的一部分。

    备注:

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

    • 您应该重新考虑将 ansible playbook 放入 /etc 的决定

    【讨论】:

    • 感谢您在回答中付出了额外的努力。你说得对,使用 shell 的处理程序不是幂等的,我只是想在模块不存在的情况下调查 Ansible 的 shell 能力。
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2018-04-29
    • 2011-06-01
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多