Ansible 2.0版本发布!

Ansible 2.0发布了!

刚刚,我们期待已久的Ansible 2.0版本已经发布并正式推出。

    Ansible 2.0 – Over the Hills and Far Away

由于有关于作者jimi-c(即James Cammarata)的发表文章,我希望尽快将其翻译出来。请注意,由于准确性问题,请与原文一起核对以避免模糊不清。

    ANSIBLE 2.0 HAS ARRIVED

(追記)
截止到2016年1月22日,您除了直接使用源代码之外,还可以使用 pip 和epel-testing 来轻松安装 Ansible 2.0。

pip : pip install ansible

epel-testing : yum install ansible –enablerepo=epel-testing

Ansible 2.0已经到达

经过超过一年的工作,我非常自豪地宣布Ansible 2.0(“远山和辽远之地”)的发布及GA(一般可用性)。这次发布是迄今为止最雄心勃勃的Ansible发布,也是源于社区持续给予的巨大贡献,让我感到惊喜不已。

从最新的主要版本Ansible开始,约有300多名用户为“v2”做出了贡献,而有500多名用户为各种模块做出了贡献。

我们为什么开始V2? V2?)

尽管软件重构存在许多陷阱,但我们为什么决定投入这样一个大型项目呢?
在我们开始进行”v2″的工作时,Ansible已经3岁了,并且贡献者也超过了1000人。
随着这样快速的增长,同时我们不断添加新功能,技术债务也开始显现出来。

最終的に、我們決定對一些程式碼進行重寫,以避免功能固定化,儘管沒有明確的架構指南。
另外,為了更容易添加語言功能,我們重寫了大部分的Playbook和YAML解析碼,以輸出錯誤和其他詳細信息(稍後做更詳細解釋)。
最後,我們將零散且沒有明確組織的程式碼重組為”utils”。

在整个过程中,我们将维持现有Playbook的向后兼容性作为基本目标之一。就分析和执行Playbook而言,我们已经成功地达到了目标。然而,由于某些功能无法保持兼容性,在此我们希望详细说明以便用户了解。

有什么新鲜事

经过大幅重构的Ansible 2.0版本提供了一些新功能。在考虑这个新架构可以实现哪些新功能的结果下,我们决定添加了一些新功能。

任务块

Block功能为Playbook提供了异常处理功能。关于异常处理,它采用了Python(以及其他许多语言)的try/except/finally模型。这意味着即使只有一个Playbook,开发包含任务失败情况的内容也比以前更容易。

此外,使用Block可以根据任务属性(如标签和条件判断)将一系列任务进行分组。

《Playbook解析,错误报告改进和动态包含》

正如上面所述,我已经对与Playbook分析相关的部分进行了几乎全部的重写。
这样一来,不仅可以明确指出错误的位置,还可以提出修正建议,不仅限于简单的YAML语法错误。

而且,include现在也可以进行动态执行。
在Ansible 1.9及之前的版本中,include在预处理阶段进行处理,导致每个任务在主机清单数据可用之前就被展开了。
这导致了在尝试同时使用include和with时(在Ansible 1.6中无法同时使用),用户会遇到问题。
在Ansible 2.0中,该功能得到恢复,并且比以前更加灵活。

新的执行策略插件

这个功能是通过本次重构特别实现的功能。通过策略,可以改变Ansible在目标主机上执行任务的方式。在传统的Ansible中,在进入下一个任务之前,单个任务会在所有主机上运行。(现在的称呼是“线性”)
Ansible 2.0还包含了“自由”策略,这个策略可以让任务在每个主机上按照编写顺序尽快执行,而不必等待其他主机。(译文提供参考,实际翻译需根据语境调整)

而这些策略都是插件化的(就像其他Ansible一样),用户也有可能创建自己的策略插件。

新模块

Ansible 2.0承袭了“即插即用”的传统,并且包含了200多个模块。以下是其中几个的介绍。

    • OpenStack環境の管理用モジュール追加

 

    • AWS環境の管理用モジュール追加/改善

 

    • VMware環境の管理用モジュール追加

 

    • Windows環境の管理用モジュール追加

 

    DockerおよびDocker接続Pluginの改善

Ansible 2.0的已知问题

包括了解决最近问题的一些方法,正如之前所述,Ansible 2.0中存在一些不兼容功能。

插件API的变动

在内部,我们进行了一项主要的清理工作,即让每个插件类(如action、callback、lookup等)都继承自共同的基类。这样做可以消除许多重复的代码,但也意味着Plugin API发生了重大变化。
因此,我们需要更新特定类型的插件,以确保其在Ansible 2.0上也能正常运行。

动态包含问题

通过这次重构,被包含的任务将在运行时进行评估,Ansible无法预先知道包含并执行的任务。
这将在一些情况下引发问题(预计将在未来版本中进行修复)。

    • タスクに設定されたタグはincludeが実行されるまで見られることがないため、includeされる個々のタスクではなくincludeに対してタグを設定しないと評価されません。–list-tags オプションについても同様です。

 

    include内部のHandlerからはnotifyが機能しません。そのため、includeとHandlerの同時利用を避ける必要があります。

(追記)
对于这里提到的动态包含问题的标签和处理程序问题,我并不确定指的是哪个具体事件。
请参考本文。
当将实际服务中使用的Ansible 1系升级到Ansible 2.0时,会发生什么?

另外,关于标签,我们在这里进行了单独的验证。对于 Ansible v2:动态包含问题进行了验证。

缺少标签

在目前的Ansible 2.0中,即使在–tags或–skip-tags中指定不存在的标签,也不会引发错误。
这也与上述动态包含的问题有关,但我们正在努力解决和解决这些问题。

反斜线转义

在Ansible 1.9及之前的版本中,有些情况下需要对反斜杠进行双重转义,导致需要写出字符串 “\\” 的情况。
这在使用lineinfile模块时尤其常见。
通过此次改进,在Playbook解析过程中只需要进行一次转义即可。

我正在创建一个移植指南,以记录关于上述一些细微变更的内容。在这里,提到了像反斜杠这样的问题及其规避方法。

供应情况

Ansible 2.0可以从Github、PyPi和主要的Linux发行版的软件包管理器中获得。

您可以使用Ansible Tower来管理Ansible、安全性等。它以订阅形式提供,可适用于小型企业到大规模、关键任务的企业用途。请查看ansible.com/tower了解更多详情。

其他资源

    • Ansible 2.0 Changelog

 

    • Get Ansible 2.0

 

    • Attend What’s New in Ansible 2.0 Webinar

 

    Learn more about Ansible

最后

只管抱怨自己的英语水平不行,重新认识到我对于Ansible 2.0的动力确实是件好事。虽然之前就有人提到Ansible 2.0的新功能,比如在Ansible 2.0的变更总结里也有提到,但是对于已知的问题却没有任何提及,所以能够确保这一点还是挺好的。

尤其是关于”include + tags”的已知问题,气氛相当不安,如果有时间,我想实际操作一下,确认问题的具体情况。

广告
将在 10 秒后关闭
bannerAds