一、为一个play指定一组标签
当为一个play指定一组标签后,该play下的所有task都会自动继承该标签,各task也可以自定义自己的标签。
- name: configure webservers
hosts: all
remote_user: ansible
tags:
- httpd
tasks:
...
在静态加载文件的指令上打标签,等价于为所加载文件中所有子任务打标签。
在动态加载文件的指令上打标签,不会为子任务打标签,而是为父任务自身打标签。
现在说结论:
(1).静态加载的指令有:roles、include、import_tasks、import_role(2).动态加载的指令只有include_xxx,包括include_tasks、include_roleimport_playbook和include_playbook因为本身就是play级别或高于play级别,所以不能为这两个指令打标签。# 5 ansible
二、ansible内置tag
除了用户自定义tag,ansible也内置了几个tag,这些tag都包含特殊含义:
- always:一旦某个task被打上了always的tag,则无论是playbook的完整执行,还是指定tag执行,不管你指定的tag是啥,该任务总是会被执行。除非明确指定"–skip-tags=always"选项,才不会执行该task。
- never:该标签与always正好相反,总是不会执行,除非明确指定"–tags=never"选项。
- tagged:在调用时使用
# 所有打了tag的任务都会被执行,包含never tag的除外,没有标签的不会被执行 ansible-playbook --tags tagged install_web.yaml # 所有打了tag的任务都不会被执行,包括always tag也不会被执行 ansible-playbook --skip-tags tagged install_web.yaml
- untagged:在调用时使用
# 所有未打tag的任务都会被执行,打了always tag的也会被执行 ansibl-playbook --tags untagged install_web.yaml # 所有未打tag的任务都不会被执行 ansibl-playbook --skip-tags untagged install_web.yaml
- all:表示所有任务都会被执行,在默认情况下,不指定任何标签,则使用的就是该标签