zoukankan      html  css  js  c++  java
  • Ansible系列基础篇 1.7.2、PlayBook之tags

     一、tags介绍

      当你写了一个很长的playbook,其中有很多的任务,这并没有什么问题,不过在实际使用这个剧本时,你可能只是想要执行其中的一部分任务而已,或者,你只想要执行其中一类任务而已,而并非想要执行整个剧本中的全部任务,这个时候我们该怎么办呢?我们可以借助tags实现这个需求。

      tags的作用是给任务打标签。,当任务存在标签以后,我们就可以在执行playbook时,借助标签,指定执行哪些任务,或者指定不执行哪些任务了,下面为tags使用示例:

    # testtag.yml
    ---
    - hosts: test70
      remote_user: root
      tasks:
      - name: task1
        file:
          path: /testdir/t1
          state: touch
        tags: t1
      - name: task2
        file: path=/testdir/t2
              state=touch
        tags: t2
      - name: task3
        file: path=/testdir/t3
              state=touch
        tags: t3
    ...
    

    上面示例代码,新建3个task,分别为每个task打上tag,使用方式如下:

    # 只执行t2任务,其他任务(t1 t3)不执行
    ansible-playbook --tags=t2 testtag.yml
    # 忽略t2任务的执行,其他任务(t1 t3)正常执行
    ansible-playbook --skip-tags=t2 testtag.yml
    

      

     二、命名标签的多种方式

    ### 每个任务添加单个标签
    # 方式1
    tags: t1
    # 方式2
    tags:
      - t2
    # 方式3
    tags: ['t3']
    ### 每个任务添加多个标签,不同的task可以命名相同的标签,执行时,相同命名的标签都会被执行
    # 方式1
    tags:
     - t1
     - t2
    # 方式2
    语法二:
    tags: t1,t2
    # 方式3
    tags: ['t1','t2']
    

      

     三、在playbook中添加tag

    当tags写在play中而非task中时,play中的所有task会继承当前play中的tags,而下例中,两个任务都会继承httpd标签,同时还有拥有自己的标签。

    ---
    - hosts: test70
      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
    ...
    

      

     四、tags高级用法

    调用标签时,也可以一次性指定多个标签,调用多个标签需要用逗号隔开,命令如下:

     ansible-playbook --tags t1,t2,t3 test.yml

     查看playbook中有哪些标签,命令如下:

    ansible-playbook --list-tags test.yml

    5个特殊tag:always ,never(2.5版本中新加入的特殊tag) ,tagged ,untagged ,all

    always:

    当我们把任务的tags的值指定为always时,那么这个任务就总是会被执行,除非你使用'--skip-tags'选项明确指定不执行对应的任务。

    # always示例
    ---
    - hosts: test70
      remote_user: root
      tasks:
      - name: task1
        file:
          path: /testdir/t1
          state: touch
        tags:
          - t1
      - name: task2
        file: path=/testdir/t2
              state=touch
        tags: ['t2']
      - name: task3
        file: path=/testdir/t3
              state=touch
        tags: t3,always
    ...
    

    命令:ansible-playbook --tags=t1 test.yml

    只指定了't1',正常情况下应该只执行't1'对应的任务,也就是应该只执行task1,但是实际上执行了task1和task3,这是因为task3的标签的值包含always关键字,所以即使task3对应的标签没有被调用,task3也会执行,这就是always的作用。

    命令:ansible-playbook --skip-tags always test.yml

     上述play中有多个任务都有always标签,那么上述命令将会跳过所有包含always标签的任务。

    如果play中的多个任务都有always标签,只想跳过task3,其他带有always标签的任务不会跳过,则执行命令:

     ansible-playbook --skip-tags t3 test.yml

    never:

    never的作用应该与always正好相反,不去执行。

    always和never是写在playbook中的标签,剩下的tagged ,untagged ,all是在执行playbook时的参数。

    tagged:

    ansible-playbook --tags tagged testtag.yml

    上述命令表示只执行有标签的任务,没有任何标签的任务不会被执行。

    ansible-playbook --skip-tags tagged testtag.yml

    上述命令表示跳过包含标签的任务,即使对应的任务包含always标签,也会被跳过。

    untagged:

     ansible-playbook --tags untagged testtag.yml

    上述命令表示只执行没有标签的任务,但是如果某些任务包含always标签,那么这些任务也会被执行。

    ansible-playbook --skip-tags untagged testtag.yml

    上述命令表示跳过没有标签的任务。

    all:

    特殊标签all表示所有任务会被执行,不用指定,默认情况下就是使用这个标签。

  • 相关阅读:
    SpringBoot + CXF快速实现SOAP WebService(支持Basic Auth)
    利用iptables做端口转发
    artDialog测试
    jquery的常用ajax操作
    通过委托让缓存操作更优雅
    Jquery取得iframe中元素的几种方法
    jQuery选择器大全
    常用JS汇总
    firefox广告拦截插件
    easyUI删除行的操作
  • 原文地址:https://www.cnblogs.com/wangsl1204/p/14193852.html
Copyright © 2011-2022 走看看