如何使用 Ansible 编写过程文档

在 Ansible 中,文档就是 playbook,因此文档自然会随着代码一起演变
178 位读者喜欢这篇文章。
We don't make software for free, we make it for freedom

Opensource.com

“文档是写给未来的自己的情书。” —Damian Conway

我使用 Ansible 作为我的个人笔记本,用于记录编码过程——包括我经常使用的和很少使用的过程。这个过程简化了我的工作,并减少了执行重复性任务所需的时间,这些任务需要按特定顺序执行特定命令才能完成特定结果。

通过使用 Ansible 编写文档,我不需要记住每个命令的所有参数或特定过程所涉及的所有步骤,并且很容易与我的团队成员分享细节。

传统的文档编写方法,如维基或共享驱动器,对于通用文档很有用,但不可避免地会过时,并且无法跟上基础设施和环境的快速变化。对于特定过程,最好使用像 Ansible 这样的工具直接在代码中编写文档。

Ansible 的优势

在我们开始之前,让我们回顾一下一些基本的 Ansible 概念:playbook 是使用 play 对过程的高级组织;play 是针对一组主机的特定过程;task 是特定操作,module 是代码单元,inventory 是受管节点的列表。

Ansible 的最大优势在于文档本身就是 playbook,因此它会随着代码一起演变并包含在代码内部。这不仅有用,而且也很实用,因为使用 Ansible 不仅仅是记录解决方案,您还可以编写一个 playbook,允许您编写过程和命令,重现它们并自动执行它们。这样,您可以在六个月后回顾,并能够快速理解并再次执行它们。

诚然,这种解决问题的方式起初可能会花费更多时间,但从长远来看肯定会节省大量时间。通过勇敢而有纪律地采用这些新习惯,您将在每次迭代中提高您的技能。

以下是一些其他重要的元素和支持工具,可以简化您的流程。

使用源代码控制

“先做到,然后做好,然后做得更好。” —Addy Osmani

在使用 Ansible playbook 时,实施 playbook 即代码策略非常重要。实现这一目标的一个好方法是使用源代码控制存储库,该存储库允许您从一个简单的解决方案开始并迭代以改进它。

当您与其他开发人员协作、恢复以前的版本以及备份您的工作时,源代码控制存储库提供了许多优势。但在创建文档时,它的主要优势在于您可以获得关于您正在做什么的可追溯性,并且可以围绕小的更改进行迭代以改进您的工作。

最流行的源代码控制系统是 Git,但还有 其他系统,例如 SubversionBazaarBitKeeperMercurial

记住幂等性

在基础设施自动化中,幂等性是指达到一个特定的最终状态,无论执行该过程多少次,该状态都保持不变。因此,当您准备自动化您的过程时,请记住期望的结果,并编写能够始终如一地实现这些结果的脚本和命令。

这个概念存在于大多数 Ansible 模块中,因为在您指定所需的最终状态后,Ansible 将实现它。例如,有用于创建文件系统、修改 iptables 和管理 cron 条目的模块。默认情况下,所有这些模块都是幂等的,因此您应该优先考虑使用它们。

如果您使用一些较低级别的模块,例如 command 或 shell,或者开发自己的模块,请注意编写具有幂等性的代码,并且可以安全地重复多次以获得相同的结果。

当您准备用于自动化的过程时,幂等性概念非常重要,因为它允许您评估几种方案并合并那些将使您的代码更安全并创建一个指向所需结果的抽象级别的方案。

测试它!

测试您的部署工作流程可以在您的代码到达生产环境时减少意外情况的发生。Ansible 认为您不需要另一个框架来验证基础设施中的基本内容是正确的。但您的重点应该是应用程序测试,而不是基础设施测试。

Ansible 的文档提供了几种 用于您的过程的测试策略。对于测试 Ansible playbook,您可以使用 Molecule,它旨在帮助开发和测试 Ansible 角色。Molecule 支持使用多个实例、操作系统/发行版、虚拟化提供程序、测试框架和测试场景进行测试。这意味着 Molecule 将运行所有测试步骤:linting 验证、检查 playbook 语法、构建 Docker 环境、针对 Docker 环境运行 playbook、再次运行 playbook 以验证幂等性,以及清理所有内容。使用 Molecule 测试 Ansible 角色 是对 Molecule 的一个很好的介绍。

运行它!

运行 Ansible playbook 会创建以不友好且难以阅读的方式格式化的日志。在这些情况下,Ansible Run Analysis (ARA) 是运行 Ansible playbook 的一个很好的补充工具,因为它提供了一个直观的界面来浏览它们。阅读 使用 ARA 分析 Ansible 运行 了解更多信息。

请记住使用 Ansible Vault 保护您的密码和其他敏感信息。Vault 可以加密二进制文件、group_varshost_varsinclude_varsvar_files。但是当您以 -v(详细)模式运行 playbook 时,此加密数据会暴露,因此最好将其与关键字 no_log 设置为 true 结合使用,以隐藏任何任务的信息,因为它指示不应记录或显示参数的值。

一个基本示例

您是否需要连接到服务器以生成报告文件并将文件复制到另一台服务器?或者您是否需要大量的特定参数才能连接?也许您不确定在哪里存储这些参数。或者您的过程是否花费很长时间,因为您需要从多个来源收集所有参数?

假设您有一个网络拓扑,其中有一些限制,并且您需要将文件从您可以访问的服务器 (server1) 复制到由第三方 (server2) 管理的另一台服务器。连接参数为

Source server: server1
Target server: server2
  Port: 2202
  User: transfers
  SSH Key: transfers_key
  File to copy: file.log
  Remote directory: /logs/server1/

在这种情况下,您需要连接到 server1 并使用这些参数复制文件。您可以使用单行命令来完成此操作

ssh server1 "scp -P 2202 -oUser=transfers -i ~/.ssh/transfers_key file.log server2:/logs/server1/"

现在您的 playbook 可以执行该过程了。

有用的组合

如果您生成大量的 Ansible playbook,您可以使用其他工具(如 AWX (Ansible Works Project))来组织所有过程,AWX 提供了一个基于 Web 的用户界面、一个 REST API 和一个构建在 Ansible 之上的任务引擎,以便用户可以更好地控制他们在 IT 环境中使用 Ansible 项目。

其他有趣的组合是 Ansible 与 Rundeck,后者将过程作为自助服务作业提供,以及 Jenkins 用于持续集成和持续交付过程。

结论

我希望这些使用 Ansible 的技巧能帮助您改进自动化流程、编码和文档编写。如果您有更多兴趣,请深入了解更多信息。我想听听您的想法或问题,请在下面的评论中分享它们。

标签
Marco Bravo's photo
我在加拿大 OVHcloud 担任 DevOps 系统管理员,我的兴趣与信息技术 (IT) 相关,特别是信息安全、开发、运营和云计算。您可以在 Twitter 上 @marcobravoram 联系我。让我们开始对话。如果你不知道,就问——如果你知道,就分享!~ 开源心态

2 条评论

我发现 Doxygen 更适合开发文档,因为它嵌入在代码中。对于程序员来说,眼不见心不烦。不过,当代码被更改时,只有大约 30% 的可能性文档会被更新。

感谢您的评论 Shawn,我非常感谢!我不知道 Doxygen,但只是阅读了它,正如您所提到的,Doxygen 是一个开发文档工具。我想使用的方法更多是过程和程序文档,为此我发现 Ansible 可能是一个不错的选择。这可能有助于系统管理员和 DevOps 组织。Ansible 提供的一个巨大优势是它可以被开发人员、系统管理员、信息安全团队使用,并且商业人士也可以阅读和使用它。我正在记下 Doxygen,以便继续阅读并弄清楚如何利用它,谢谢!

回复 ,作者是 Shawn H Corey

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.