Ansible角色和处理程序 - 无法让角色处理程序工作

时间:2014-07-14 08:44:33

标签: ansible-playbook

我需要在Centos 6.5中设置Apache / mod_wsgi,所以我的主要YAML文件是这样的:

---
- hosts: dev
  tasks:
    - name: Updates yum installed packages
      yum: name=* state=latest


- hosts: dev
  roles:
    - { role: apache }

这应该更新所有yum安装的软件包然后执行apache角色。

apache角色配置为安装Apache / mod_wsgi,将Apache设置为在启动时启动并重新启动它。以下是roles/apache/tasks/main.yml

的内容
---
- name: Installs httpd and mod_wsgi
  yum: name={{ item }} state=latest
  with_items:
    - httpd
    - mod_wsgi
  notify:
    - enable httpd
    - restart httpd

roles/apache/handlers/main.yml中的处理程序:

---
- name: enable httpd
  service: name=httpd enabled=yes

- name: restart httpd
  service: name=httpd state=restarted

处理程序似乎没有运行,因为在执行playbook时给出了以下输出:

PLAY [dev] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [dev.example.com]

TASK: [Updates yum installed packages] **************************************** 
ok: [dev.example.com]

PLAY [dev] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [dev.example.com]

TASK: [apache | Installs httpd and mod_wsgi] ********************************** 
ok: [dev.example.com] => (item=httpd,mod_wsgi)

PLAY RECAP ******************************************************************** 
dev.example.com            : ok=4    changed=0    unreachable=0    failed=0 

当我vagrant ssh进入虚拟机时,sudo service httpd status显示httpd已停止,sudo chkconfig --list显示init尚未启用{{1}}

我刚刚开始使用Ansible,那么有什么明显的东西可能会丢失吗?

1 个答案:

答案 0 :(得分:13)

嗯,回答我自己的问题,我意识到我错过了一个微妙的观点:

http://docs.ansible.com/playbooks_intro.html#handlers-running-operations-on-change

具体地,仅当任务引入改变时才产生通知信号。因此,对于我的用例,我认为我将在独立任务中启用和启动Apache,而不是依赖于更改信号处理程序。