Ansible 处理程序和 shell 模块
Ansible handlers and shell module
我有一个剧本,其中包含以下任务和处理程序部分(只是一个片段):
tasks:
- name: 'Run legacy script and power off'
debug: msg="Preparing for reboot"
notify: Legacy sysprep
handlers:
- name: Enable Service1
service: name=service1 enabled=yes state=restarted
- name: Legacy sysprep
shell: /var/scripts/prep-reboot.sh
当我 运行 剧本时,我看到调用 Legacy sysprep
处理程序的任务的调试消息,我看到 Enable Service1
处理程序已执行,但是 Legacy sysprep
处理程序未被调用(它未显示在剧本输出中,也未显示在系统上 运行)并且服务器未重新启动(脚本的一部分)。
是的,我计划将 prep-reboot.sh 脚本迁移到 Ansible 剧本,但令我惊讶的是,显然 shell
模块似乎不起作用?还是我忽略了一个错误? 运行 -vvv
没有报告任何意外。
Ansible 和 Ansible-playbook 版本 2.1.1.0 运行在 RHEL 6.8 上运行。
谢谢@techraf,你让我指明了正确的方向。我最终将 changed_when: true
添加到调试行,这会强制播放注册一个更改,然后触发适当的处理程序。
下面是我的实测剧本,供参考:
---
- name: Testing forced handler
hosts: testsys_only
gather_facts: True
tasks:
- name: 'Run legacy script and power off'
debug: msg="Preparing for reboot"
changed_when: true
notify: Legacy sysprep
handlers:
- name: Enable Service1
service: name=service1 enabled=yes state=restarted
- name: Legacy sysprep
shell: /var/scripts/prep-reboot.sh
我有一个剧本,其中包含以下任务和处理程序部分(只是一个片段):
tasks:
- name: 'Run legacy script and power off'
debug: msg="Preparing for reboot"
notify: Legacy sysprep
handlers:
- name: Enable Service1
service: name=service1 enabled=yes state=restarted
- name: Legacy sysprep
shell: /var/scripts/prep-reboot.sh
当我 运行 剧本时,我看到调用 Legacy sysprep
处理程序的任务的调试消息,我看到 Enable Service1
处理程序已执行,但是 Legacy sysprep
处理程序未被调用(它未显示在剧本输出中,也未显示在系统上 运行)并且服务器未重新启动(脚本的一部分)。
是的,我计划将 prep-reboot.sh 脚本迁移到 Ansible 剧本,但令我惊讶的是,显然 shell
模块似乎不起作用?还是我忽略了一个错误? 运行 -vvv
没有报告任何意外。
Ansible 和 Ansible-playbook 版本 2.1.1.0 运行在 RHEL 6.8 上运行。
谢谢@techraf,你让我指明了正确的方向。我最终将 changed_when: true
添加到调试行,这会强制播放注册一个更改,然后触发适当的处理程序。
下面是我的实测剧本,供参考:
---
- name: Testing forced handler
hosts: testsys_only
gather_facts: True
tasks:
- name: 'Run legacy script and power off'
debug: msg="Preparing for reboot"
changed_when: true
notify: Legacy sysprep
handlers:
- name: Enable Service1
service: name=service1 enabled=yes state=restarted
- name: Legacy sysprep
shell: /var/scripts/prep-reboot.sh