Tags
官网示例:https://docs.ansible.com/ansible/2.6/user_guide/playbooks_tags.html
编写执行playbook的时候,每次修改完yml文件,没必要把整个playbook都运行一遍,只需要运行改变了的task。我们可以给task一个标签,运行playbook时明确只运行这个标签(tag)对应的task就可以了。多个任务可以使用同一个tags,一个任务也可以用多个tags表示
官方示例:
- hosts:webserver
tags: deploy #给整个playbook打标签
tasks: - yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
tags: #用packages和pk 标签来表示yum这个操作
- packages
- pk
- template: src=templates/src.j2 dest=/etc/foo.conf
tags:
- configuration
此时若希望只run其中的某个task,这run 的时候指定tags即可
ansible-playbook example.yml --tags "configuration,packages" #run 多个tags
ansible-playbook example.yml --tags packages # 只run 一个tag
相反,也可以跳过某个task
ansible-playbook example.yml --skip-tags configuration
tags属性放到roles上
roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] } #将会给roles下的所有任务打上标签
tags属性与include结合使用
- include: foo.yml tags=web,foo
always、tagged、untagged、all 是四个系统内置的tag,有自己的特殊意义
always: 指定这个tag 后,task任务将永远被执行,而不用去考虑是否使用了--skip-tags标记
tagged: 当 --tags 指定为它时,则只要有tags标记的task都将被执行,--skip-tags效果相反
untagged: 当 --tags 指定为它时,则所有没有tag标记的task 将被执行,--skip-tags效果相反
all: 这个标记无需指定,ansible-playbook 默认执行的时候就是这个标记.所有task都被执行
Block
block功能可以将任务进行分组,并且可以在块级别上应用任务变量
示例(任务分组):
--- - hosts: web tasks:
- block
- yum: name=httpd state=present
- template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- service: name=httpd state=started enabled=yes
when: ansible_os_family == "RedHat"
sudo :yes - block:
- apt: name=apache2 state=present
- template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- service: name=httpd state=started enabled=yes
when: ansible_os_family == "RedHat"
sudo :yes