我正在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
答案 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了解更多详情。