Ansible 标签可用于仅运行部分任务/角色。这意味着默认情况下会执行所有任务,我们只能阻止某些任务执行。
我们可以限制要执行的任务吗仅有的何时指定“foo”标签?我们可以在when
任务部分中使用当前标签吗?
答案1
Ansible 2.5 带有特殊标签never
和always
。标签never
正好可用于此目的。例如:
tasks:
- debug: msg='{{ showmevar}}'
tags: [ 'never', 'debug' ]
在这个例子中,只有明确请求debug
(或)标签时,任务才会运行。never
[参考 ansible 文档]
答案2
也许更惯用和更优雅的方式是when
向任务添加条件,如下所示:
tasks:
- debug: msg='{{ showmevar}}'
tags: [ 'debug' ]
when: "'debug' in ansible_run_tags"
这使用神奇变量ansible_run_tags
其中包含通过 CLI 参数提供的标签列表--tags
(或同义词-t
),并具有运行上述任务的效果当且仅当debug
已给出标签。
似乎这个魔法变量是在 ansible 2.5 中引入的
答案3
我没有足够的声誉来对建议使用命令行变量(--extra-vars
)的答案进行投票或评论,但我可以补充一点:
此方法的警告是,如果您不定义该额外变量,则播放将出错并失败。
--extra-vars
您可以在剧本本身中定义一个默认值,以防止在没有定义的情况下播放失败:
---
- hosts: ...
# ↓↓↓
vars:
thorough: false
# ↑↑↑
tasks:
- name: apt - install nfs-common only when thorough is true
when: thorough | bool
apt:
cache_valid_time: 86400
force: yes
pkg:
- nfs-common
覆盖 via--extra-vars
仍然有效,因为在命令行上定义的变量优先于所有其他定义。
结果是,当命令行上thorough
未更改为时,剧本运行时不会出现错误。true
答案4
您可以使用条件语句以防止意外运行未指定标签时本应执行的任务。此方法的警告是,如果您未定义该额外变量,则播放将出错并失败。
使用 extra-vars 参数,您可以触发要执行的条件。
来自 ansible-playbook --help:
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
set additional variables as key=value or YAML/JSON
例子:
ansible-playbook test.yaml -e "thorough=true"
测试.yaml:
...
- name: apt - install nfs-common only when thorough is true
apt:
cache_valid_time: 86400
force: yes
pkg:
- nfs-common
when: thorough | default(False)
...