ansible进阶小技巧

用ansible写playbook的朋友可能会发现,当配置工作很多时,如果在中间过程出错了,修改后想重新执行,前面的一大堆步骤让人感觉很烦躁。虽然提供了“retry”文件,但是却只是根据host来判断重新执行,仍然不够方便;又或者,中间的某些步骤特别耗时,比如下载一个很大的数据包,每次执行特别浪费时间,想要特别的跳过。怎么办?我猜你就是把不需要的部分给注释掉了。有没有更好的办法呢?

当然,现在流行的ansible有提供一种方法解决这个问题。

    ansible的playbool中有一个关键字,叫做tags。tags是什么?就是打标签。tags可以和一个play(就是很多个task)或者一个task进行捆绑。然后,ansible-playbook提供了“–skip-tags”和“–tags” 来指明是跳过特定的tags还是执行特定的tags。

下面请看例子。

  1. <pre class=”plain” name=”code”># example 1 test1.yml  
  2. – hosts: test-agent  
  3.   tasks:  
  4.     – command: echo test1  
  5.       tags:   
  6.          – test1  
  7.     – command: echo test2  
  8.       tags:   
  9.          – test2  
  10.     – command: echo test3  
  11.       tags:   
  12.          – test3  

 


当执行  ansible-playbook test1.yml –tags=”test1,test3″  ,则只会执行 test1和test3的echo命令。

当执行  ansible-playbook test1.yml –skip-tags=”test2″  ,同样只会执行 test1和test3的echo命令。

同理可以适用于play,请看例子

  1. # example 2 test2.yml  
  2. – hosts: test-agent1  
  3.   tags:   
  4.      – play1  
  5.   tasks:  
  6.      – command: echo This is  
  7.      – command: echo agent1  
  8. – hosts: test-agent2  
  9.   tags:   
  10.      – play2  
  11.   tasks:  
  12.      – command: echo This is  
  13.      – command: echo agent2  
  14. – hosts: test-agent3  
  15.   tags:   
  16.      – play3  
  17.   tasks:  
  18.      – command: echo This is  
  19.      – command: echo agent3  

 

当执行  ansible-playbook test2.yml –tags=”play1,play3″  ,则只会执行 play1和play3的tasks。

当执行  ansible-playbook test2.yml –skip-tags=”play2″  ,同样只会执行 test1和test3的tasks。

同理还有include和role

  1. – include: foo.yml tags=web,foo
  1. roles:
  2.   – { role: webserver, port: 5000, tags: [ ‘web’, ‘foo’ ] }

你肯定注意到了,这个的一个include和role,同时打了多个tags。是的,这是允许的,而且不同的tags名称是等效的。多个tags对play和task同样适用。–skip-tags=”web”和–skip-tags=”foo”,效果是一样的。如果是–skip-tag=”web,foo”呢?效果还是一样的。呵呵开玩笑的,我没有试过,欢迎你试一下。

既然一个job可以有多个tags,那么多个job是否可以有同一个tags呢?答案是肯定的。而且,没有开玩笑。不行你试试。下面举例

 

  1. <pre class=”plain” name=”code”># example 3 test3.yml  
  2. – command: echo task111  
  3.   tags:  
  4.      – task1  
  5. – command: echo task112  
  6.   tags:  
  7.      – task1  
  8. – command: echo task333  
  9.   tags:  
  10.      – task3  
  11. – command: echo task222  
  12.   tags:  
  13.      – task2  

当执行  ansible-playbook test2.yml –skip-tags=”play1″  ,则只会执行 task3和task2的tasks,task1中的2个task都被skip了。

当执行  ansible-playbook test2.yml –tags=”task2,task3″  ,仍然只会执行 task3和task2的tasks,并且请注意,是按照playbooks中代码的顺序执行,而不是–tags中参数的顺序执行。

ansible是根据输入的tags的参数,与playbook中进行比较,按照playbook的执行顺序,跳过或执行特定的tags。对于没有打tags的部分,没有影响,正常顺序执行。

好了,ansible的tags鄙人就了解这么多,欢迎大家使用tasks管理ansible的playbook。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100266

(2)
单爆手单爆手
上一篇 2018-06-03
下一篇 2018-06-03

相关推荐

  • ssh等

    SSH端口转发 SSH会自动的加密和解密所有SSH客户端与服务器之间的网络数据;同时也可以将其他TCP端口的数据加密转发,这一过程叫“隧道”,这样也可以减少防火墙开启的端口。 实现过程是数据首先通过连接本机的某一个端口,被当做ssh协议数据发送给ssh服务器,ssh服务器解密再发给远程主机的端口 本地转发: -L localport:remotehost:r…

    2018-05-28
  • 第一周-Linux基础

    一、计算机的组成及其功能 由上图可知,计算机由硬件系统和软件系统组成:   1. 计算机硬件系统从逻辑上主要由运算器、控制器、存储器、输入设备、输出设备这五部分组成。 ● 存储器:实现记忆功能的部件用来存放计算程序及参与运算的各种数据;● 运算器:负责数据的算术运算和逻辑运算即数据的加工处理;● 控制器:负责对程序规定的控制信息进行分析,控制并协调输入,输出…

    Linux笔记 2018-05-11
  • 网络管理基础

    1.PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位 物理层的 PDU是数据位 bit 数据链路层的 PDU是数据帧 frame 网络层的PDU是数据包 packet 传输层的 PDU是数据段 segment 其他更高层次的PDU是消息 message 2.TCP特性工作在传输层 面向连接协议 全双工协…

    Linux笔记 2018-05-02
  • linux与xshell入门

    难的不行,做标记

    2018-07-29
  • 一些常用的文本工具

    cat命令:查看文本内容 cat [选项]… [文件]… -E    显示行结束符 -n    显示文本内容时显示行号 -A    显示所以控制符 -b    非空行编号 -s     压缩连续的空行成一行 head命令 : -n  显示文件前n行,默认显示前10行 -c # 显示文件前#个字节内容 tail命令: tail [选项]…

    2018-04-09
  • 第一周作业笔记

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    Linux笔记 2018-06-21