在我成长的时候,我的祖父的花园里有一个棚子。他会在那里花费数小时,制作和修理东西。那时我们还没有互联网,所以我花了很多时间研究他在那个棚子里创造东西。虽然棚子里堆满了各种工具,从钻头到车床,再到电器元件,还有许多我甚至今天都无法识别的东西,但他只使用了他手头拥有的工具的一小部分。 然而,他所能取得的成就似乎没有限制。
我告诉你这个故事,是因为我觉得我的职业生涯就像在一个隐喻的棚子里度过。计算机就像许多工具,都集中在一个小的(虚拟?)空间里。 而且工具棚里还有工具棚——我最喜欢的是 Ansible。 最近的 2.9 版本附带了 3,681 个模块! **3,681!** 当我 2013 年夏天开始使用 Ansible 时,1.2.1 版本只有 113 个模块,但正如我当时写的那样,我仍然可以实现我想象的任何事情。
模块是 Ansible 的支柱,是让重活变得轻松的齿轮。 它们旨在做好一项工作,从而实现 Unix 哲学。 这就是我们捆绑了这么多模块的原因; Ansible 作为乐队的指挥,现在拥有大量的乐器可供使用。
回顾我多年来 Ansible 剧本和角色的 Git 存储库后发现,我只使用了 35 个模块。 这个小集合被用来构建大型基础设施。 我想知道使用更小的子集可以实现什么? 当我回顾这 35 个时,我思考着是否可以使用我拥有的五个模块来实现相同的结果。 所以这里是我最喜欢的五个模块,以相当牵强的优先级顺序排列。
5. authorized_key
安全外壳 (SSH) 是 Ansible 的核心,至少对于 Windows 以外的几乎所有内容来说都是如此。 使用 SSH 与 Ansible 高效的关键是... 密钥! 稍微跑题一下——你可以使用 SSH 密钥做很多非常酷的安全事情。 值得仔细阅读 sshd 手册页的 **authorized_keys** 部分。 如果你进入细粒度的用户访问领域,管理 SSH 密钥可能会变得很麻烦,虽然我们可以使用我的接下来两个最喜欢的模块来做到这一点,但我更喜欢使用该模块,因为它支持通过变量轻松管理。
4. file
除了将文件放置在某个位置的明显功能外,**file** 模块还设置所有权和权限。 我认为一个模块能做这么多工作真是物超所值。 我想说的是,很大一部分安全性也与设置权限有关,因此 **file** 模块与 **authorized_keys** 配合得很好。
3. template
有很多方法可以操作文件的内容,我看到很多人使用 **lineinfile**。 我自己也用它做过小任务。 但是,**template** 模块更清晰,因为你维护了整个文件以获得上下文。 我的偏好是以任何人都能理解的方式编写 Ansible 内容——对我来说,这意味着不要让人们难以理解正在发生的事情。 使用 **template** 意味着能够看到你正在使用的整个文件,包括你用来更改各个部分的变量。
2. uri
当前发行版中的许多模块都利用 Ansible 作为编排器。 它们与另一个服务通信,而不是做一些具体的事情,比如将文件放置到位。 通常,这种通信也是通过 HTTP 进行的。 在许多这些模块出现之前,你可以使用 **uri** 模块直接编写 API 程序。 这是一个强大的访问工具,使你能够做很多事情。 在我虚构的 Ansible 棚子里,我不能没有它。
1. shell
我们牌组中的王牌。 瑞士军刀。 如果你绝对不知道如何控制其他东西,请使用 **shell**。 有些人会争辩说我们现在正在让 Ansible 成为 Bash 脚本——但是,我会说它仍然更好,因为通过在你的剧本和角色中使用 **name** 参数,你可以记录每个步骤。 对我来说,这和任何事情一样都是一个巨大的好处。 回到我还在咨询的时候,我曾经帮助一位数据库管理员 (DBA) 迁移到 Ansible。 DBA 不喜欢改变,并抵制改变工作方法。 因此,为了轻松进入 Ansible 方式,我们使用 **shell** 模块从 Ansible 调用了一些现有的数据库管理脚本。 并附带一个信息丰富的 **name** 语句来伴随该任务。
使用这五个模块你可以实现很多目标。 是的,旨在执行特定任务的模块会让你的生活更加轻松。 但凭借一点工程上的简单性,你可以用很少的东西实现很多目标。 Ansible 开发者 Brian Coca 是这方面的大师,他的技巧和窍门演讲总是值得一看。
你怎么看我的前五名? 如果你受到如此限制,你会选择哪五个模块以及为什么? 请在下面的评论中告诉我!
评论已关闭。