首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >禁止处理程序运行

禁止处理程序运行
EN

Stack Overflow用户
提问于 2017-02-07 15:15:29
回答 2查看 9.6K关注 0票数 13

有什么方法阻止处理程序运行吗?我试着给它添加标签和使用“--跳过标签”,但是它不起作用。

我可以添加下一个角色变量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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 02:06:48

Ansible中目前没有变量,它允许您测试在运行时指定了哪些标记。

正如您已经发现的,不管分配了哪些标记,处理程序都会运行。这些文档并没有清楚地说明这是一个错误还是打算采取的行为。

一些备选办法是:

  • 向任务添加另一个变量并使用它,因为处理程序仍然可以以when:子句为条件。
  • 让处理程序包含另一个文件,并分配操作和标记。文件将始终包括在内,但标记将使操作成为条件。
  • 在任务中设置一个标记操作,然后为处理程序设置一个局部变量。任务中的这种转换将允许在运行时仍然使用标记。
票数 11
EN

Stack Overflow用户

发布于 2019-08-27 15:17:46

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

代码语言:javascript
复制
$ 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"

正常使用如下所示:

代码语言:javascript
复制
$ ansible-playbook test.yaml

跳过处理程序:

代码语言:javascript
复制
$ ansible-playbook test.yaml -e skip_handlers=true
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42093385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档