禁止处理程序运行

时间:2017-02-07 15:15:30

标签: ansible

有没有办法阻止处理程序运行?我试图添加标签并使用" - skip-tags"对它,但它不起作用。

我可以添加下一个角色变量reload_service: true并使用它,但我已经开始使用标记,它们可以很好地重新运行部分角色。

处理程序通常用于重新启动服务,我想在不更改角色变量的情况下运行此角色而不启动服务,只是为了涵盖下一个案例。

我正在使用ansible 2.1.2.0

测试用例:

mkdir -p test/role/handlers test/role/tasks cd test echo -ne '---\n - command: "echo Test"\n notify: restart\n' > role/tasks/main.yml echo -ne '---\n- name: restart\n command: "echo Handler"\n tags: [handlers]\n' > role/handlers/main.yml echo -ne '---\n- hosts: localhost\n gather_facts: false\n roles:\n - role\n' > play.yml ansible-playbook play.yml --skip-tags handlers

2 个答案:

答案 0 :(得分:6)

Ansible中目前没有变量可以让你测试在运行时指定了哪些标签。

正如您所发现的,处理程序无论分配的标记如何都会运行。该文档没有说明这是一个错误还是预期的行为。

有些选择是:

  • 向任务添加另一个变量并使用它,因为处理程序仍然可以以'where:'子句为条件。

  • 让处理程序包含另一个带有操作和分配标记的文件。该文件将始终包含在内,但标记会使操作成为条件。

  • 在任务中有标记的操作,然后为处理程序设置局部变量。任务中的转换将允许标记仍在运行时使用。

答案 1 :(得分:0)

以下是如何使用变量跳过处理程序的示例:

$ cat test.yaml
---
- hosts: localhost
  tasks:
  - copy:
      content: "{{ ansible_date_time.epoch }}" # This will always trigger the handler.
      dest: /tmp/debug
    notify:
      - debug

  handlers:
  - name: debug
    debug:
      msg: Hello from the debug handler!
    when:
    - skip_handlers | default("false") == "false"

正常使用如下所示:

$ ansible-playbook test.yaml

并跳过处理程序:

$ ansible-playbook test.yaml -e skip_handlers=true