zoukankan      html  css  js  c++  java
  • 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
    ~                               
    

      

  • 相关阅读:
    开始学习编写用于 Windows SideShow 设备的小工具【转】
    Windows Mobile 6.5 Developer Tool Kit 下载
    Microsoft Security Essentials 微软免费杀毒软件下载
    SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (2)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (4)
    负载测试、压力测试和性能测试的异同
    Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
    Silverlight Tools 安装失败 解决办法
    SQL Server 2008 空间数据库 空间索引概念及创建(取自帮助)
  • 原文地址:https://www.cnblogs.com/minseo/p/13755433.html
Copyright © 2011-2022 走看看