有没有办法阻止处理程序运行?我试图添加标签并使用" - 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
答案 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