本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/02/ansible-2-released

经过了一年的开发工作后,Ansible 2.0最终公布。如今已经是GA版了。这是眼下为止最为闪耀的一个Ansible版本号,它折射出了社区所贡献的巨大力量。这一切也令全部人感动万分。大约有300个用户对这个版本号贡献了代码;自上一个基本的Ansible版本号公布后,约有500个用户贡献了代码。

我们为何要開始V2的开发?

重构软件的过程中会遇到非常多陷阱,那么我们为何要开启这个项目呢?在我们開始进行v2的开发时。Ansible距离最初的公布已经有3年多的时间了,而且有超过1,000个贡献者为其贡献代码。

这样的持续的增长也导致代码中出现了技术债务,这些技术债务在我们不断加入新特性的时候開始显现出来。

最终。我们决定退回一步,又一次编写现有代码基中那些easy产生问题的部分。我们还重写了负责解析Playbook与其它YAML文件的代码。从而使得加入语言特性能够变得更加轻松。同一时候提供关于解析问题的很多其它错误信息。最后,我们做了划分并又一次组织代码,让查找变得更加easy,而且删除了一些“辅助”代码;这些“辅助”代码已经变成了零散物品的收集器,将那些不知道该放在什么地方的代码都容纳了进来,实际上这是不正确的。

在这整个过程中,我们的一个基本目标是保持对既有Playbook的向后兼容性。对于解析与执行Playbook来说。我们相信自己已经达成所愿。只是,对于某些特性来说还是存在一些不兼容的情况,用户须要清晰这一点,后面也会进行介绍。

新特性有哪些?

Ansible 2.0并不仅仅仅仅是对既有系统的重构。更清晰的架构能够让我们加入一直想要加入的新特性;同一时候因为重构的原因。我们还加入了之前一直无法加入的新特性。

任务块

块(Blocks)引入了对Playbook异常处理的概念,它依据Python的try/except/finally结构进行建模(同一时候也是其它非常多语言的使用方式)。

这简化了Playbook与任务的开发工作,当中任务失败能够被捕获到。而且在单个Playbook中进行处理,这一切要比之前简单太多了。用户还能够通过块使用标签与条件(以及其它任务属性)对相关任务进行分组。

Playbook解析、错误报告改进与动态包括

如前所述。我们差点儿全然重写了负责解析与解释Playbook的代码。

新的代码提供了更加清晰的错误识别能力,同一时候还给出了超越简单的YAML语法错误的修复建议。除此之外。包括任务如今能够动态执行了。在Ansible 1.9.x及之前的版本号中,包括的行为更像是预处理语句,任务会内联展开。

这会导致用户在循环中使用包括时出现故障(Ansible 1.6删除了该特性)。Ansible 2.0则将该特性又加回来了,甚至比之前更加灵活。

新的执行策略插件

该特性是因为重构才加入进来的。执行策略能够让用户改动Ansible在目标主机上执行任务的方式。经典的Ansible任务是个单任务,在转向下一个任务前须要在全部主机上执行(如今我们称之为“线性”策略)。Ansible 2.0也包括了“自由”策略,能够让每一个主机尽快处理任务列表(依旧是依照顺序的)。同一时候又不必等待其它主机的处理。因为这些都是以插件的形式出现的(就像Ansible中的其它插件)。因此用户能够自由选择这些策略。

新的模块

Ansible 2.0包括了200多个新模块,从而延续了我们一直以来所秉承的“电池内置”策略。一些主要模块有:

  • 用于管理OpenStack(主流的开源云计算框架)的全新模块集,这是与OpenStack社区合作开发的
  • 30个全新模块,用于改进与扩展对Amazon Web Services的支持
  • 对于VMware环境配置与管理的进一步支持
  • 对于Microsoft Window环境的进一步支持
  • 对于Docker模块的实质性改进,以及新的Docker连接插件

Ansible 2.0的已知问题

如前所述。Ansible对于既有Playbook存在一些不兼容的情况,同一时候另一些小问题,我们会在未来修复这些问题。

Plugin API变化

在内部,我们所做的基本的代码清理工作之中的一个就是让每一个插件类(action、callback、lookup等)都继承自一个共同的父类。

这样就能够删除大量的反复代码。只是,这也意味着插件API发生了巨大的变化。

已经编写过一些插件的用户可能须要更新其插件才干使用Ansible 2.0。

动态包括问题

因为如今的包括任务是在执行期计算的,因此Ansible无法提前预知文件里应该包括哪些任务。这会在一些情况中出现故障(未来的版本号中将会修复这些问题):

直到包括处理时才会看到任务标记。因此标记如今应该在包括任务上指定而非包括中的详细任务,否则将看不到他们。与之相似,--list-tags选项无法展现仅仅位于包括文件里的标记。仅仅有当任务尝试通知时才会看到包括中的处理器,因此处理器这时应该避免使用包括。

丢失的标记

假设通过--tags或是--skip-tags指定了不存在的标记,那么Ansible 2.0如今是不会报错的。这也与之前提到的动态包括问题相关。一旦上面提到的问题解决后我们就将解决问题。

反斜杠转义

在Ansible 1.9.x及之前的版本号中,某些情况下。反斜杠(“\”)须要转义两次,这会导致4个反斜杠序列(“\\\\”)。

对于上面所提及的Playbook的改进意味着仅仅需对反斜杠转义一次就可以。还有其它一些细小的特性变化,我们会在迁移指南中以文档的形式记录下来。该指南还包括了对于诸如反斜杠转义等问题的解决的方法。

Ansible 2.0眼下能够通过GitHubPyPi以及大多数主流Linux公布版本号的包管理器获取。

Ansible 2.0公布的更多相关文章

  1. Qt on Android: Qt 5.3.0 公布,针对 Android 改进的说明

    5月20日本,Qt 官方博客宣布 Qt 5.3.0 公布! 这个版本号聚焦在性能.稳定性和可用性的提升上,与 5.1 / 5.2 相比有非常大提升. 5.3.0 的主要变化: 稳定能.可用性大大提升 ...

  2. GCC 4.9.0 公布,提升 C++11 和 C++14 特性

    from :http://www.oschina.net/news/51084/gcc-4-9-0 GCC 4.9.0 公布,此版本号是个主要版本号更新,包含了 GCC 4.8.x 系列和之前的 GC ...

  3. ansible api2.0 多进程执行不同的playbook

    自动化运维工具:ansible 多进程调用ansible api的应用场景:   应用系统检查 一个应用系统可能具有20—50台服务器的集群,初步的系统层面检查可以用一个统一的playbook来检查, ...

  4. 【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)

    JEECG-P3 1.0 公布了! JEECG-P3 1.0是一个J2EE微服务框架(插件开发). 特点:业务组件以JAR方式提供,插件模式.松耦合.可插拔.支持独立部署,也能够无缝集成Jeecg平台 ...

  5. 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!

    公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide ...

  6. 号外:Spark 1.3.0公布了,快来一起飞!

    Spark 1.3.0 Release Note Spark 1.3.0在上周五正式公布.真是千呼万唤始出来.本次公布最大的惊喜就是DataFrame.另外一个值得关注的是Spark SQL从Alph ...

  7. 在iis6.0公布asp.net mvc3网站

    在iis6.0发布asp.net mvc3网站 这个问题一直困扰了我很长一段时间,终于在今天综合网上查的资料把它解决了. 在iis6.0发布asp.net mvc3网站 1   需要在服务器下安装.n ...

  8. SecureCRT 8.0公布

    百度搜索到的7.3 注冊码生成器还是能够用于8.0的破解. 破解时,选择手动输入(Enter Licence Manually)产生的代码. 添加了一些特性,我最看重的是: 1.  能够在以下命令窗体 ...

  9. Java 开源博客——B3log Solo 0.6.7 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...

随机推荐

  1. H.264学习笔记4——变换量化

    A.变换量化过程总体介绍 经过帧内(16x16和4x4亮度.8x8色度)和帧间(4x4~16x16亮度.4x4~8x8色度)像素块预测之后,得到预测块的残差,为了压缩残差信息的统计冗余,需要对残差数据 ...

  2. InChatter系统之本地化

    InChatter现在支持本地化了,其实这个只是很细节的东西,但是咱也是可以走走国际范.哈哈 其实最重要的原因只是想进行一次本地化的开发.这个概念相信大部分人都有,但是在实际项目中真的很少会涉及到,我 ...

  3. python学习日记-01

    一. 熟悉 在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的: (1)基本的输入输出 可以在Python中使用+.-.*./直接进行四则运算. >>> 1+3* ...

  4. iOS截取特定的字符串(正则匹配)

    有时候我们会有需求从一个字符串中截取其他的字符串,根据情况的不同,我们来分析几种方法~~ 一. 固定长度字符串中截取固定位置长度的字符串 // 这是比较简单的一种情况:比如截取手机号的后4位 let ...

  5. sql 语句的优化

    sql语句的优化:在大多数情况下,为了更快的遍历表结构,优化器主要是根据定义的索引来提高性能.但是在不合理的SQL语句中,优化器会删去索引进而使用全表扫描, 一般而言,这种sql被称为劣质sql,所以 ...

  6. autorun - 自动装载/卸载CDROMs并在装载后执行/path/to/cdrom/autorun

    总览 autorun [-lmqv?V] [-a EXEC] [-c CDPLAYER] [-e STRING] [-i MILLISEC] [-n STRING] [-t STRING] [--au ...

  7. 关于 <script type='text/template' > 的妙用 / 使用jquery获取iframe加载完成事件

    https://www.cnblogs.com/ddqyc/p/6200539.html <!DOCTYPE html> <html> <head> <met ...

  8. .less css 使用 LESS 简化层叠样式表(CSS)的编写(另外一种css框架 sass)

    使用 LESS 简化层叠样式表(CSS)的编写 https://less.bootcss.com/ Sass完全兼容所有版本的CSS https://gojs.net/latest/samples/f ...

  9. April Fools Day Contest 2019: editorial回顾补题

    A. Thanos Sort time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. vc++实现控制USB设备启用与否

    #include <WINDOWS.H>      #include <TCHAR.H>      #include <SETUPAPI.H>      //#in ...