📅  最后修改于: 2020-12-26 12:23:20             🧑  作者: Mango
如果您有大型剧本,那么仅运行其中的特定部分而不是运行剧本中的所有内容将变得很有用。为此,Ansible支持标签属性。
将标记应用于事物时,可以通过添加命令行选项来控制它们是否执行。
执行剧本时,可以通过两种方式根据标签过滤任务,例如:
在Ansible中,标签可以应用于许多结构,但是最简单的用法是用于单个任务。让我们看一个示例,该示例使用不同的标签来标记两个任务,例如:
tasks:
- yum:
name: "{{ item }}"
state: present
loop:
- httpd
- memcached
tags:
- packages
- template:
src: templates/src.j2
dest: /etc/foo.conf
tags:
- configuration
如果要运行非常长的剧本的配置和程序包部分,则可以在命令行上使用-tags选项。
ansible-playbook example.yml --tags "configuration,packages"
而且,如果您要运行没有某些已标记任务的剧本,则可以使用-skip-tags命令行选项。
ansible-playbook example.yml --skip-tags "packages"
我们可以将同一标签应用于多个任务。通过使用“ –tags ”命令行选项,将运行具有该标签名称的所有任务。
例如:在下面的示例中,我们将一个标签“ ntp ”用于多个任务,例如:
---
# file: roles/common/tasks/main.yml
- name: be sure ntp is installed
yum:
name: ntp
state: present
tags: ntp
- name: be sure ntp is configured
template:
src: ntp.conf.j2
dest: /etc/ntp.conf
notify:
- restart ntpd
tags: ntp
- name: be sure ntpd is running and enabled
service:
name: ntpd
state: started
enabled: yes
tags: ntp
“ always ”是将始终运行任务的唯一标签,除非特别跳过( –skip-tags always )
例如:
tasks:
- debug:
msg: "Always runs"
tags:
- always
- debug:
msg: "runs when you use tag1"
tags:
- tag1
这是另一个“从不”的唯一标记,除非有特殊要求,否则它将阻止任务运行。
例如:
tasks:
- debug: msg="{{ showmevar }}"
tags: [ never, debug ]
在上面的示例中,仅在明确请求“从不”或“调试”标记时,任务才会运行。
以下是标签的另外三个特殊关键字:
只有已标记的“已标记”,
“ untagged ”,仅在不加标签的情况下运行,并且
“ all ”分别运行所有任务。
默认情况下,Ansible就像所有“ –tags ”被指定一样运行。