ansbile Tags && Block

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
原文地址:https://www.cnblogs.com/FRESHMANS/p/8427313.html