如果你有一个大的剧本,你可以在不运行整个剧本的情况下运行一个特定的部分。
例子:Example:
tasks:
- yum: name={{ item }} state=installed with_items: - httpd - memcached tags: - packages - template: src=templates/src.j2 dest=/etc/foo.conf tags: - configuration
如果您想要运行“配置”和“包”部分的很长的脚本,您可以这样做:
ansible-playbook example.yml --tags "configuration,packages"
另一方面,如果你想在没有特定任务的情况下运行剧本,你可以这样做:
ansible-playbook example.yml --skip-tags "notification"
Tag Reuse
您可以在同一个文件或包含文件中对多个任务应用相同的标记名。这将用该标记运行所有任务。Example:
---
# file: roles/common/tasks/main.yml
- name: be sure ntp is installed yum: name=ntp state=installed 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
Tag Inheritance
You can apply tags to more than tasks, but they ONLY affect the tasks themselves. Applying tags anywhere else is just a convenience so you don’t have to write it on every task:
- hosts: all
tags: - bar tasks: ... - hosts: all tags: ['foo'] tasks: ...
You may also apply tags to roles:
roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }
And import/include statements:
- import_tasks: foo.yml
tags: [web,foo]
or:
- include_tasks: foo.yml
tags: [web,foo]
All of these apply the specified tags to EACH task inside the play, included file, or role, so that these tasks can be selectively run when the playbook is invoked with the corresponding tags.
Tags are inherited down the dependency chain. In order for tags to be applied to a role and all its dependencies, the tag should be applied to the role, not to all the tasks within a role.
You can see which tags are applied to tasks by running ansible-playbook
with the --list-tasks
option. You can display all tags using the --list-tags
option.
Special Tags
有一个特殊的always标记,它将始终运行一个任务,除非特别跳过(- -skip- tags总是)
Example:
tasks:
- debug: msg="Always runs" tags: - always - debug: msg="runs when you use tag1" tags: - tag1