Ansible定义自定义服务路径,仅在重新启动服务时通知

时间:2015-03-13 10:20:12

标签: ansible ansible-playbook

我正在AIX上进行新的opsware代理服务检查,其代理路径是/etc/rc.d/init.d/opsware-agent。

首先,请让我知道如何定义此变量路径并调用服务。

其次,只有在重新启动此opsware代理服务时才应运行该命令。怎么做,因为下面的一个不起作用。

- name: Ensure Opsware agent is running on AIX 
service: name={{ aix_service_path }} state=started enabled=yes
register: aix_status


 - name: Opsware AIX Notify only if it failed
 when: aix_status|success
 notify:
 - hardware refresh
 - software refresh

- name: hardware refresh
command: chdir=/opt/opsware/agent/pylibs/cog/ ./bs_hardware

- name: software refresh
command: chdir=/opt/opsware/agent/pylibs/cog/ ./bs_Software

1 个答案:

答案 0 :(得分:1)

让我假设YML格式正确并且在您的帖子中被破坏了。否则,您首先需要正确缩进行。

然后确保您的处理程序位于handlers/main.yml内。在你的帖子中,它看起来像是在同一个文件中,然后当然会在每次播放时执行。

最后,您可以在服务任务中触发处理程序,无需执行虚拟任务,因为实际上没有定义任何操作,因此该任务无法工作。

所以这应该有效:

<强> your_role /任务/ main.yml:

---

- name: Ensure Opsware agent is running on AIX 
  service: name={{ aix_service_path }} state=started enabled=yes
  notify:
  - hardware refresh
  - software refresh

...

<强> your_role /处理程序/ main.yml:

---

- name: hardware refresh
  command: chdir=/opt/opsware/agent/pylibs/cog/ ./bs_hardware

- name: software refresh
  command: chdir=/opt/opsware/agent/pylibs/cog/ ./bs_Software

...

仅当服务状态为changed时才会通知处理程序。

如何定义aix_service_path取决于您要归档的内容。您可以在your_role/defaults/main.yml中定义默认值:

---

aix_service_path: foo

...

或者通过在your_role/vars/main.yml中定义它来强制它 - 与上面的默认格式相同。

您可以在剧本中的角色调用中传递参数,例如

  roles:
    - role: your_role
      aix_service_path: foo

像这样传递的参数会覆盖defaults/main.yml中的定义,但不会覆盖vars/main.yml中定义的定义。

您可以在剧本的vars部分定义它。

您可以在调用Playbook时在命令行上传递它。

ansible-playbook ... --extra-vars "aix_service_path=foo"

或者将其定义为服务器或组var。您也可以在清单中定义变量......确实有很多用于定义变量的选项。你必须决定哪个符合你的需求。查看variables section in the Ansible docs了解更多详情。