2017-02-07 58 views
2

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

这是不可理解:“*我想不跑不改变的作用只是为了掩饰一个case开始服务这个角色*。” – techraf

+0

@techraf我的意思是,我不希望改变的变量,最好我不应该有像rsyslog_add_service:true这样的任何条件变量,但我只是使用更容易控制的标签。 – alkuzad

+0

但是你不能使用标签。什么是问题?你还没有解释那句话的意思 - 我看不出有什么联系。 – techraf

回答

3

目前内Ansible没有变量,它可以让你测试哪些代码在运行时被指定。

正如您发现的那样,处理程序不管分配的标签而运行。文档没有明确说明这是一个错误还是意图行为。

某些选项:

  • 另一个变量添加到任务并使用这个,因为处理程序仍然可以在“其中:”条件子句。

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

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

+0

是的,这些只是有效的选择,但我很失望,如何分裂ansible,我只是转向盐。 – alkuzad

相关问题