Ansible处理程序和shell模块

时间:2016-10-05 18:23:24

标签: ansible ansible-playbook ansible-2.x

我有一个带有以下任务和处理程序部分的剧本(只是一个片段):

  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

当我运行playbook时,我看到调用Legacy sysprep处理程序的任务的调试消息,我看到Enable Service1处理程序已执行,但Legacy sysprep处理程序不是调用(它不会显示在playbook输出中,也不会在系统上运行)并且服务器不会重新启动(脚本的一部分)。

是的,我计划将prep-reboot.sh脚本迁移到Ansible playbook,但我很惊讶显然shell模块似乎不起作用?还是我忽略了一个错误?使用-vvv运行时不会报告任何意外情况。

在RHEL 6.8上运行的Ansible和Ansible-playbook版本2.1.1.0。

1 个答案:

答案 0 :(得分:1)

谢谢,@ 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