Playbook中的Tags使用详解
在ansible的playbook中,当我们面对一个冗长的脚本,包许多任务时,有时我们并不需要执行所有的任务。这时候,`tags` 就能发挥其作用了。
什么是tags?
`tags` 允许我们对任务进行“打标签”的操作。当任务被赋予了标签后,我们就可以在执行playbook时,通过指定标签来决定执行哪些任务。
如何使用tags?
如例所示,每个task都有对应的tags。为了方便理解,这里只是简单地用t1、t2、t3作为tags的值。在实际使用中,应确保tags的值具有描述性。
指定需要执行的任务
若想执行某个特定标签的任务,可以使用 `--tags` 选项。例如,只想执行标签为 `t2` 的任务,可以执行如下命令:
```shell
ansible-playbook --tags="t2" playbookname.yml
```
这样,只有标签为 `t2` 的 `task` 会被执行,其他任务都不会被执行。
指定不执行的任务
除了指定需要执行的任务外,还可以通过 `--skip-tags` 选项指定不执行的任务。例如,不希望执行标签为 `t2` 的任务,可以执行如下命令:
```shell
ansible-playbook --skip-tags="t2" playbookname.yml
```
为任务添加多个标签
每个任务不是只有一个标签,我们可以为每个任务添加多个标签。这可以通过使用YAML块序列的语法格式、使用逗号分隔的语法等形式实现。
标签的继承
当tags写在play中而非task中时,play中的所有task会继承当前play中的tags。例如,上例中两个任务都继承了httpd标签,同时还有自己的独特标签。
调用多个标签
在调用标签时,可以一次性指定多个标签。只需在命令行中使用逗号隔开即可。
查看所有的标签
如果你想要概览一下playbook中都有哪些标签,可以使用 `--list-tags` 选项。
特殊tags
Ansible还预置了几个特殊tag,如 `always`、`never`(2.5版本中新增)、`tagged`、`untagged` 和 `all`。这些特殊tag在特定情况下非常有用。例如,当任务的tags值被设为 `always` 时,该任务总是会被执行,除非明确使用 `--skip-tags` 选项跳过它。
always tag的详细解释与应用
如上例所示,即使只指定了执行标签为 `t1` 的任务,但由于 `task3` 的标签中包含了 `always` 关键字,因此 `task3` 也会被执行。这意味着即使其他条件不满足,带有 `always` 标签的任务也会被执行。如果你不想执行包含 `always` 标签的任务,可以使用 `--skip-tags` 选项明确跳过它们。但需要注意的是,如果有多个任务都有 `always` 标签,此选项会跳过所有包含 `always` 标签的任务。若只希望跳过一个特定的任务,需要确保该任务有除了 `always` 以外的其他自定义标签。
其他特殊tags的应用
其他如 `tagged`、`untagged` 和 `all` 这些特殊tags,在调用时作为参数使用。例如:只执行有标签的任务、跳过有标签的任务、只执行无标签的任务等。这些tags为任务的精细控制提供了便利。而 `all` 是一个默认的tag,表示所有任务都会被执行。