Ansible定义自定义服务路径并仅在服务重新启动时通知
我正在AIX上进行一个新的opsware代理服务检查,它的代理路径是/etc/rc.d/init.d/opsware-agent 首先,请让我知道如何定义这个变量路径和调用服务 其次,仅当此opsware代理服务已重新启动时,它才应运行该命令。怎么做,因为下面的一个是不工作的Ansible定义自定义服务路径并仅在服务重新启动时通知,ansible,ansible-playbook,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
- 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
让我假设YML格式是正确的,只是在你的帖子中被破坏了。否则,首先需要正确缩进行 然后确保处理程序位于
handlers/main.yml
内。在你的帖子里,看起来所有的东西都在同一个文件里,当然每个剧本都会被执行
最后,您可以在服务任务中触发处理程序,而无需使用虚拟任务,因为实际上没有定义操作,因此虚拟任务也无法工作
因此,这应该是可行的:
你的角色/任务/main.yml:
---
- name: Ensure Opsware agent is running on AIX
service: name={{ aix_service_path }} state=started enabled=yes
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
...
你的角色/handlers/main.yml:
---
- name: Ensure Opsware agent is running on AIX
service: name={{ aix_service_path }} state=started enabled=yes
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
...
仅当服务状态更改时才会通知处理程序
如何定义aix\u服务\u路径取决于要归档的内容。您可以在您的_role/defaults/main.yml
中定义默认值:
---
aix_service_path: foo
...
或者通过在您的_role/vars/main.yml
中定义它来强制它-与上面的默认格式相同
您可以在剧本中的角色调用中传递参数,例如
roles:
- role: your_role
aix_service_path: foo
这样传递的参数将覆盖defaults/main.yml
中的定义,但不会覆盖vars/main.yml
中定义的定义
您可以在剧本的vars
部分中定义它
ansible-playbook ... --extra-vars "aix_service_path=foo"
您可以在调用playbook时在命令行上传递它
ansible-playbook ... --extra-vars "aix_service_path=foo"
或者将其定义为服务器或组变量。您还可以在清单中定义变量。。。定义变量确实有很多选择。你必须决定哪一个适合你的需要。有关更多详细信息,请查看。谢谢。关于在/vars/main.yml中定义角色后的“角色:您的角色”,我应该将此角色称为何处?我的意思是我应该把这个角色称为/tasks/main.yml吗?如果是,如何执行此操作。角色将在剧本中引用。建议在剧本中不要包含任务,而只包含角色,在角色中包含所有任务。看看这里,您可以看到一个基本的目录结构,包括一个示例角色:@udondan Handlers可以位于同一个playbook文件中,只要它们位于Handlers:
块下。看,是的,但我们只喜欢剧本中的角色,不是吗D