Ansible 2.0公布
本文来源于我在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公布的更多相关文章
- Qt on Android: Qt 5.3.0 公布,针对 Android 改进的说明
		5月20日本,Qt 官方博客宣布 Qt 5.3.0 公布! 这个版本号聚焦在性能.稳定性和可用性的提升上,与 5.1 / 5.2 相比有非常大提升. 5.3.0 的主要变化: 稳定能.可用性大大提升 ... 
- 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 ... 
- ansible api2.0 多进程执行不同的playbook
		自动化运维工具:ansible 多进程调用ansible api的应用场景: 应用系统检查 一个应用系统可能具有20—50台服务器的集群,初步的系统层面检查可以用一个统一的playbook来检查, ... 
- 【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)
		JEECG-P3 1.0 公布了! JEECG-P3 1.0是一个J2EE微服务框架(插件开发). 特点:业务组件以JAR方式提供,插件模式.松耦合.可插拔.支持独立部署,也能够无缝集成Jeecg平台 ... 
- 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
		公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide ... 
- 号外:Spark 1.3.0公布了,快来一起飞!
		Spark 1.3.0 Release Note Spark 1.3.0在上周五正式公布.真是千呼万唤始出来.本次公布最大的惊喜就是DataFrame.另外一个值得关注的是Spark SQL从Alph ... 
- 在iis6.0公布asp.net mvc3网站
		在iis6.0发布asp.net mvc3网站 这个问题一直困扰了我很长一段时间,终于在今天综合网上查的资料把它解决了. 在iis6.0发布asp.net mvc3网站 1 需要在服务器下安装.n ... 
- SecureCRT 8.0公布
		百度搜索到的7.3 注冊码生成器还是能够用于8.0的破解. 破解时,选择手动输入(Enter Licence Manually)产生的代码. 添加了一些特性,我最看重的是: 1. 能够在以下命令窗体 ... 
- Java 开源博客——B3log Solo 0.6.7 正式版公布了!
		Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ... 
随机推荐
- apache设置无缓存
			打开httpd.conf 开启扩展 确保开启 LoadModule headers_module modules/mod_headers.so 添加配置项 并添加以下配置,跟据文件类型来让浏览器每次都 ... 
- 契约式设计(DbC)感想(一)
			契约式设计可以理解为正则编程的一种实践: 如果用我的三脚猫能力将这种实践方法形式化的话,大致如下(如有不正确处,请不吝指正): 1.对于方法Method的precondition & post ... 
- LeetCode137只出现一次的数字——位运算
			题目 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次.找出那个只出现一次的元素. 说明:你的算法应该具有线性时间的复杂度.你可以不使用额外的空间来实现吗? 思路 题 ... 
- Python框架Django的入门
			本篇文章主要给大家介绍Django的入门知识: 
- 【原】简单shell练习(二)
			1.查找awk # cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7 ... 
- react-native  IOS   Build input file cannot be found: '~~~~~/node_modules/react-native/Libraries/WebSocket/libfishhook.a'
			尝试添加或者删除libfishhook.a 如果解决了你的问题请点个赞! 
- [Luogu] P1131 [ZJOI2007]时态同步
			题目描述 题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3…进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何 ... 
- java常见日期格式转换以及日期的获取
			package com.test.TestBoot.SingleModel;import java.text.SimpleDateFormat;import java.util.Date;public ... 
- canvas学习--准备
			一)canvas标签 属性: 1.width 和 height 控制canvas宽高: 2.style添加基本样式 3.class,id属性 4.标签内添加一行文本,主要用于浏览器不支持canvas标 ... 
- python 安装模块 更新模块
			#显示模块pip list #显示过期模块pip list --outdated #安装模块pip install xxx #升级模块pip install --upgrade xxx 
