ansible基础-Jinja2模版 | 测试

一 简介

注:本文demo使用ansible2.7稳定版

Jinja2的测试语句被用来评估一个条件表达式,并且最终返回True或False,经常和「when」语句搭配使用。

测试语句和过滤器的相同点:测试语句的条件表达式也在控制端执行,在目的主机端生效。

测试语句和过滤器的不同点:

  • 前者多被用于「比较」,执行结果是True或False,而后者多被用于对数据的操作与转换,执行结果是我们期望的数据内容或数据格式。
  • 语法不同,前者使用「is」,后者使用「|」

测试语句的语法很简单,写法如下:

variable is test_name

举个?,task执行结果为failed时,则返回True:

result is failed

二 测试字符串

关键字「match」和「search」,参数可以使用正则表达式,用来查找一个字符串是否与测试语句相匹配。

vars:url: "http://example.com/users/foo/resources/bar"tasks:- debug:msg: "matched pattern 1"when: url is match("http://example.com/users/.*/resources/.*")- debug:msg: "matched pattern 2"when: url is search("/users/.*/resources/.*")- debug:msg: "matched pattern 3"when: url is search("/users/")

通过上面示例,我们可以看出:

  • 关键字「match」用于判断一个字符串的完整匹配
  • 关键字「search」用于判断一个字符串的部分匹配

三 测试版本号

关键字「version」(旧版本为「version_compare」),用于比较版本号。

例如,测试当前centos操作系统的版本号是否大于等于「7.2.1511」,可以这样写:

{{ ansible_facts['ansible_distribution_version'] is version('7.2.1511', '>=') }}

如果当前操作系统版本号大于或等于「7.2.1511」,条件表达式返回True,否则返回False。

「version」接受的运算符如下:

<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne

「version」也可以接受「strict」参数,这个参数默认值为「False」,如果设置为「True」则ansible会进行更严格的版本检查:

{{ sample_version_var is version('1.0', operator='lt', strict=True) }}

四 测试列表

关键字「superset」和「subset」,用于测试一个列表是否包含或被包含于另一个列表:

vars:a: [1,2,3,4,5]b: [2,3]
tasks:- debug:msg: "A includes B"when: a is superset(b)- debug:msg: "B is included in A"when: b is subset(a)

关键字「all」和「any」,用于检查列表里的元素的真假:

vars:mylist:- 1- "{{ 3 == 3 }}"- Truemyotherlist:- False- True
tasks:- debug:msg: "all are true!"when: mylist is all- debug:msg: "at least one is true"when: myotherlist is any

用大学学的离散数学概括下:

all:一假则假

any:一真则真

五 测试文件路径

测试文件路径的关键字从字面上就能看出来其含义,下面直接上示例:

- debug:msg: "path is a directory"when: mypath is directory- debug:msg: "path is a file"when: mypath is file- debug:msg: "path is a symlink"when: mypath is link- debug:msg: "path already exists"when: mypath is exists- debug:msg: "path is {{ (mypath is abs)|ternary('absolute','relative')}}"- debug:msg: "path is the same file as path2"when: mypath is same_file(path2)- debug:msg: "path is a mount"when: mypath is mount

注:这个特性在ansible>=2.5的版本中才有,在生产实践中,可以替换旧版本中「stat」+「register」+「when」实现的功能。

六 测试任务执行结果

测试任务执行结果也比较通俗易懂,示例如下:

tasks:- shell: /usr/bin/fooregister: resultignore_errors: True- debug:msg: "it failed"when: result is failed# in most cases you'll want a handler, but if you want to do something right now, this is nice- debug:msg: "it changed"when: result is changed- debug:msg: "it succeeded in Ansible >= 2.1"when: result is succeeded- debug:msg: "it succeeded"when: result is success- debug:msg: "it was skipped"when: result is skipped

七 本节应该掌握的技能

  • 掌握测试语句与过滤器的相同点和异同点。
  • 掌握在playbook和模版中灵活运用测试语句。

八 参考链接

  • https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html

欢迎大家关注我的公众号:

posted @ 2018-12-03 00:21 MauriceWei 阅读(...) 评论(...) 编辑 收藏

ansible基础-Jinja2模版 | 测试相关推荐

  1. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  2. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  3. Ansible基础概述

    一.Ansible简介 Ansible基于Python语言实现,由paramiko和PyYAML两个关键模块构建.Ansible的编排引擎可以出色地完成配置管理,流程控制,资源部署等多方面工作.Ans ...

  4. Flask框架基础Jinja2模板

    Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 文章目录 Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 return 模板 Template 模板的使用 ...

  5. 36: ansible基础 、 Ansible ad-hoc 、 总结和答疑

    Top NSD AUTOMATION DAY01 案例1:部署Ansible 案例2:Ansible ad-hoc应用一 案例3:Ansible ad-hoc应用二 案例4:Ansible ad-ho ...

  6. 计算机基础及应用笔试,计算机基础及应用测试笔试题

    计算机基础及应用测试笔试题 站点:专业:学号: 一.选择题 1.下面文件扩展名是不可以直接运行的是: A..exe B..doc. C..com 2.计算机将数据暂存在中等待处理. A.内存 B.硬盘 ...

  7. 知道python测试答案_大数据分析的python基础知道章节测试答案

    大数据分析的python基础知道章节测试答案 更多相关问题 下列是内流湖的是[ ]A.青海湖 B.洪泽湖 C.洞庭湖 D.西湖 下列河流冬季有结冰现象的是[ ]A.松花江 B.黄河 C.珠江 D.长江 ...

  8. 《Ansible权威指南 》一第2章 Ansible基础元素介绍

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第2章,第2.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 ...

  9. OpenGL和D3D11中的深度模版测试

    在OpenGL和D3D11的管线中,像素shader之后的操作就是深度模版测试,深度模版测试是以sample为单位进行的,就是一个像素上可以有多个采样点,每个采样点都有深度信息.深度模版测试对每个采样 ...

最新文章

  1. 2017图灵奖出炉:Google母公司董事长和杰出科学家共获殊荣
  2. ZABBIX企业微信新版告警
  3. phython在file同时写入两个_喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
  4. WPS 去掉自动打开的文档漫游和在线模板
  5. keras_1_Keras_Model简介
  6. linux内核在什么目录结构,Linux Kernel 目录结构说明
  7. Java SecurityManager checkAccess()方法与示例
  8. Python预测2020高考分数和录取情况
  9. 【Erlang新手成长日记】Erlang开源项目推荐
  10. lax文件的编码问题
  11. 【大数据部落】R语言电商网站爬虫
  12. 杰理AD14N/AD15N---外置Flash烧录音乐文件
  13. c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
  14. 服务器端网站自适应,[移动SEO]PC端和移动端最佳适配方案
  15. java等额本息、等额本金计算 记录一下
  16. FXGL JAVA游戏引擎 教程 .04 动画 (可爱乌贼娘)
  17. SQL SERVER 2016安装部署
  18. eel+python 开发html5跨平台桌面应用1
  19. 关于思科C2950交换机console清除密码,恢复初始配置的方法
  20. c语言---c语言中的斐波那契数列程序

热门文章

  1. 那如何在OC中 编写一段代码 可获取到用户是否进入了某个指定的QQ群聊
  2. 小时用计算机怎么算,一天24小时在计算机上消耗多少千瓦小时,以及一天中计算机的用电量计算...
  3. Flutter学习笔记08-Padding Row Column Flex Expanded组件详解
  4. 求两个正整数的最小公倍数
  5. 【转】播放器基本原理(播放四步法)
  6. 2020某宝双十二活动auto脚本,强势来袭!
  7. 看完这6款浏览器的对比,你还使用国产浏览器吗
  8. ubuntu18.04换源
  9. 【牛客贪心】牛牛的朋友
  10. modprobe安装_MacBook安装Arch的一些设置