在 Ansible Playbook 中使用标签

标签基本上是附加到任务、角色、戏剧等的元数据。使用标签在节省时间和简化剧本的运行和调试工作方面具有很大的优势。 它还使剧本更有条理和健壮。

我们将涵盖什么?

在本指南中,我们将了解如何在 Ansible 剧本中使用标签。 我们还看到了一些基本示例来演示标签在必要时的作用。

你需要什么?

作为我们之前的实验,我们需要满足以下要求才能执行本教程中显示的示例:

1. 你应该在控制器节点上安装了 Ansible(在我们的例子中是 Ubuntu 20.04)。

2.你应该对Ansible的目的是什么以及如何编写剧本有一个基本的了解(当然你需要知道剧本是什么)。

如果你刚开始学习 Ansible,我们建议你先学习 Vagrant 以及如何使用 Vagrant 搭建一个基本的本地测试环境。 一旦您设置了一个由一个控制器节点和两个目标节点组成的基本实验室,您就可以执行这些示例了。

Ansible 中的标签需求

在许多情况下,您可能希望运行 playbook 的特定部分,而不是执行整个 playbook。 这在剧本非常大的情况下非常方便。 在这种情况下,标签用于运行或跳过剧本中的任务。 这是通过两步方法完成的:

1. 将所需的标签添加到目标任务。

2.根据标签选项运行或跳过任务。

可以为任务、块、角色或整个剧集定义标签。 “tags”关键字用于定义标签,我们将在后续示例中很快看到。

使用标签

1.从基本示例开始

在最基本的形式中,单个任务可以有一个或多个标签。 类似地,一个公共标签可以链接到多个任务。 例如,考虑以下剧本:

---  - hosts: all  gather_facts: yes  become: true  tasks:  - name: Update the system repository information (‘apt-get update’)  ansible.builtin.apt:  update_cache: yes  tags: ubuntu  - name: Run the equivalent of ‘apt-get dist-upgrade’ to upgrade the system as a separate step  ansible.builtin.apt:  upgrade: dist  tags: [ ubuntu, distup ]  - name: Install the apache web server and ntp program  ansible.builtin.apt:  name:  - apache2  - ntp  state: present  tags:  - ntp  - webservers  - ubuntu  - name: Restart apache  ansible.builtin.service:  name: apache2  state: restarted  tags:  - ubuntu  - RestartApache 

给定的剧本中有四个任务:

1.第一个任务只有一个标签,而其他任务有多个。

2. “ubuntu”标签是一个常见的标签,与所有四个任务相关联。

将标签用于多个任务(标签重用)会执行与该标签链接的所有任务。 为此,在命令行中指定了“—tags”标志。

假设我们已经运行了一次之前的剧本,当我们只想重新启动 apache 服务而对其他任务不做任何事情时。 在这种情况下,我们必须以下列方式运行 playbook(我们的 my-playbook.yml):

$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --tags RestartApache 

2.跳过剧本中的标签

如果您想从执行中跳过任务,Ansible 为您提供了“–skip-tags”参数。 剧本的其余部分正常运行。 在前面的例子中,让我们忽略升级系统的任务(task:2)。 为此,“ansible-playbook”命令修改为:

$ ansible-playbook myplaybook.yml -i /path/to/inventory/file --skip-tags distup