Ansible:仅当指定标签时才执行任务

Ansible:仅当指定标签时才执行任务

Ansible 标签可用于仅运行部分任务/角色。这意味着默认情况下会执行所有任务,我们只能阻止某些任务执行。

我们可以限制要执行的任务吗仅有的何时指定“foo”标签?我们可以在when任务部分中使用当前标签吗?

答案1

Ansible 2.5 带有特殊标签neveralways。标签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)
...

相关内容