ansible-仅当角色中的任何任务发生更改时才运行处理程序
我创建了一个处理程序,用于ansible-仅当角色中的任何任务发生更改时才运行处理程序,ansible,yaml,handler,roles,Ansible,Yaml,Handler,Roles,我创建了一个处理程序,用于重新启动服务器,我有一个角色,该角色使用多个配置设置操作系统(该角色中大约有6个任务),我只想在整个角色中的任何任务发生更改时触发重新启动服务器处理程序,并且在整个角色完成后也会触发该处理程序 我试着把“通知”放在这个角色的剧本上。但得到的错误是错误“通知”不是一个有效的播放属性 site.yml --- - name: Setup OS parameters hosts: master_servers roles: - os_prep tags:
重新启动服务器
,我有一个角色,该角色使用多个配置设置操作系统(该角色中大约有6个任务),我只想在整个角色中的任何任务发生更改时触发重新启动服务器
处理程序,并且在整个角色完成后也会触发该处理程序
我试着把“通知”放在这个角色的剧本上。但得到的错误是错误“通知”不是一个有效的播放属性
site.yml
---
- name: Setup OS parameters
hosts: master_servers
roles:
- os_prep
tags: os_prep
notify:
- restart server
重新启动服务器的处理程序
---
- name: restart server
command: /sbin/shutdown -r now
async: 0
poll: 0
ignore_errors: true
notify:
- check server status
- name: check server status
wait_for:
port: 22
host: '{{ inventory_hostname }}'
search_regex: OpenSSH
delay: 10
timeout: 60
connection: local
运行整个角色“os_prep”后,如果角色中的任何任务的状态已“更改”,则
重新启动要触发的服务器处理程序。notify
是任务的属性,而不是游戏的属性。因此,您应该将notify:restart server
添加到您角色的所有任务中。假设您的所有任务都在角色/os\u prep/tasks/main.yml
中。它看起来像这样:
---
- name: Configure this
template:
src: myConfig.cfg.j2
dest: /etc/myConfig.cfg
notify: restart server
- name: Change that
moduleX:
…
notify: restart server
- name: Add users
user:
name: "{{ item.key }}"
home: "/home/{{ item.key }}"
uid: "{{ item.value.uid }}"
with_dict: "{{ users }}"
notify: restart server
- …
---
- name: restart server
command: /sbin/shutdown -r now
async: 0
poll: 0
ignore_errors: true
listen: Restart and wait server
- name: check server status
wait_for:
port: 22
host: '{{ inventory_hostname }}'
search_regex: OpenSSH
delay: 10
timeout: 60
connection: local
listen: Restart and wait server
处理程序的行为将按预期进行。如果这些任务中的任何一个获得了更改的
状态,它将在播放结束时重新启动(仅一次)
请注意,根据我的说法,您不应将notify
应用于不需要重新启动的任务。通常只有很少的东西需要重新启动服务器。在我上面的示例中,添加用户后不需要重新启动。大多数情况下,服务重启就足够了。当然,我不知道你的用例
额外评论 附注1 我看到你把你的经纪人拴起来了。请注意,也可以使用处理程序的
listen
属性来执行此操作。在您的任务中,您需要通知:重新启动并等待服务器,您的角色/os_prep/handlers/main.yml将如下所示:
---
- name: Configure this
template:
src: myConfig.cfg.j2
dest: /etc/myConfig.cfg
notify: restart server
- name: Change that
moduleX:
…
notify: restart server
- name: Add users
user:
name: "{{ item.key }}"
home: "/home/{{ item.key }}"
uid: "{{ item.value.uid }}"
with_dict: "{{ users }}"
notify: restart server
- …
---
- name: restart server
command: /sbin/shutdown -r now
async: 0
poll: 0
ignore_errors: true
listen: Restart and wait server
- name: check server status
wait_for:
port: 22
host: '{{ inventory_hostname }}'
search_regex: OpenSSH
delay: 10
timeout: 60
connection: local
listen: Restart and wait server
附注2
请注意,还有一个重新启动
模块,可以用来代替命令:shutdown-r
下面是文档:它通过从所有需要重新启动服务器的任务中调用处理程序来修复,并且似乎处理程序最后只被触发一次。