一个很长的playbook,其中有很多任务,只想执行其中一部分任务或一类任务,可以借助于打标,即tags
示例,给每个任务一个tag
---
- hosts: self1-1
remote_user: root
tasks:
- name: task1
file:
path: /testdir/t1
state: touch
tags: t1,tag2
- name: task2
file: path=/testdir/t2
state=touch
tags:
- t2
- tag2
- name: task3
file: path=/testdir/t3
state=touch
tags: ['t3','tag3']
打标的写法也有多种,还可以一个任务打多个标签,参考上例
只执行t2标签的任务
ansible-playbook --tags=t2 testtag.yml
跳过t2标签的任务
ansible-playbook --skip-tags=‘t2’ testtag.yml
也可以通过命令执行多个标签的任务
ansible-playbook --tags package,service testhttpd.yml
tag还可以打在play上,这个play中的任务都会继承这个tag,并且还可以有自己的tag
---
- hosts: self1-1
remote_user: root
tags: httpd
tasks:
- name: install httpd package
tags: ['package']
yum:
name=httpd
state=latest
- name: start up httpd service
tags:
- service
service:
name: httpd
state: started
概览playbook中有哪些标签
ansible-playbook --list-tags testhttpd.yml
有五个内置标签
always never tagged untagged all
always 总是执行,除非用–skip-tags='t3’明确排除,所以
ansible-playbook --tags=t2 testtag.yml
下例的t3也会被执行
---
- hosts: test70
remote_user: root
tasks:
....
- name: task3
file: path=/testdir/t3
state=touch
tags: t3,always
tagged:只执行打了标签的
untagged: 只执行未打标签的