• ansible笔记(13):tags的用法


      参考:http://www.zsythink.net/archives/2641

    这篇文章会介绍playbook中tags的用法。

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

    见名知义,tags可以帮助我们对任务进行'打标签'的操作,当任务存在标签以后,我们就可以在执行playbook时,借助标签,指定执行哪些任务,或者指定不执行哪些任务了,这样说可能不够直观,我们来看一个小示例(为了方便示例此处只写3个任务进行举例)。

    [root@node1 ansible]# cat 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
    

     如上例所示,上例的play中有3个task,每个task都有对应的tags,为了方便示例,我只是简单的把tags的值写成了t1、t2、t3,在实际的使用中,我们应该让tags的值能够见名知义,现在每个task都有了标签,假如在执行上述playbook时,我们只想执行task2,该怎样执行呢?我们可以使用如下命令

    ansible-playbook --tags=t2 testtag.yml 
    

     

    如你所见,可以使用--tags选项指定某个标签,当指定标签后,只有标签对应的任务会被执行,其他任务都不会被执行,执行上述命令后,只有task2会执行,因为task2的标签值为t2,task1和task3都不会执行,这样就达到了只执行playbook中部分任务的目的。

    借助标签,除了能够指定"需要执行的任务",还能够指定"不执行的任务",示例命令如下。

    ansible-playbook --skip-tags=t2 testtag.yml
    

    我们可以使用 --skip-tags选项指定"不执行的任务",执行上述命令后,task1和task3会执行,task2不会执行,因为我们已经在命令中指定了'跳过'标签t2所对应的任务,相当于使用了'排除法',t2对应的任务被排除了,其他任务都会执行。

    除了使用上例中的语法指定标签,还能够使用下例中的两种语法指定标签的值。

    [root@node1 ansible]# cat 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']
    

     之前描述的三种语法都可以指定标签,不过上例中,每个任务只有一个标签,其实,我们可以为每个任务添加多个标签,三种语法添加多个标签的示例如下

    语法一:
    tags:
     - testtag
     - t1
     
    语法二:
    tags: tag1,t1
     
    语法三:
    tags: ['tagtest','t2']
    

    上述示例的语法一使用了YAML块序列的语法格式指定多个标签,语法二与语法三都是在原来语法的基础上,使用'逗号'隔开多个标签。

    如下例所示,不同的任务可以使用相同的标签。

    [root@node1 ansible]# cat testhttpd.yml 
    ---
    - hosts: test70
      remote_user: root
      tasks:
      - name: install httpd package
        tags: httpd,package
        yum:
          name=httpd
          state=latest
    
      - name: start up httpd service
        tags: httpd,service
        service:
          name=httpd
          state=started
    

    上例中每个任务都有多个标签,而且上例中两个任务都有一个共同的标签,就是httpd标签,所以,当我们执行'ansible-playbook --tags=httpd testhttpd.yml',上述两个任务都会执行。

    上例的play中的所有任务都有共同的httpd标签,像这种情况,我们可以把httpd标签提取出来,写在play中,示例如下。

    ---
    - 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
    ~                               
    

      

  • 相关阅读:
    ACDream
    HDU
    拼音码和五笔码生成规则
    XML与DataTable相互转换
    如何给gridControl动态的添加合计
    SqlBulkCopy将DataTable中的数据批量插入数据库中
    截取中间字符
    将Excel表格数据转换成Datatable
    DevExpress GridControl 使用方法技巧 总结 收录整理
    C#小技巧
  • 原文地址:https://www.cnblogs.com/minseo/p/13755433.html
Copyright © 2020-2023  润新知