选择适合您的 Ansible 集合的 5 个技巧

尝试这些策略,在安装 Ansible 插件和模块集合之前找到并审查它们。
69 位读者喜欢这篇文章。
Woman sitting in front of her computer

Ray Smith

2020 年 8 月,Ansible 发布了自开发者将核心功能从绝大多数模块和插件中分离出来后的第一个版本。一些基本的 Ansible 模块仍然是核心 Ansible 的一部分,例如用于模板化配置文件、管理服务和安装软件包的模块。所有其他模块和插件都归入了专门的 Ansible 集合中。

本文概述了 Ansible 集合,特别是如何识别高质量的集合。

什么是 Ansible 集合?

从本质上讲,Ansible 集合是相关模块和插件的集合(双关语),您可以独立于 Ansible 的核心引擎对其进行管理。例如,Sensu Go Ansible 集合包含用于管理 Sensu Go 各个方面的 Ansible 内容。它包括用于安装 Sensu Go 组件的 Ansible 角色以及用于创建、更新和删除监控资源的模块。另一个例子是 Sops Ansible 集合,它将 Mozilla 的 Secret Operations editor 与 Ansible 集成。

随着 Ansible 集合的引入,Ansible Galaxy 成为所有 Ansible 内容的中心枢纽。作者在那里发布他们的 Ansible 集合,Ansible 用户使用 Ansible Galaxy 的搜索功能来查找他们需要的 Ansible 内容。

Ansible 捆绑了 ansible-galaxy 工具,用于安装集合。一旦您知道要安装哪个 Ansible 集合,事情就相对简单了:运行 Ansible Galaxy 页面上列出的安装命令。Ansible 会负责下载和安装。例如

$ ansible-galaxy collection install sensu.sensu_go
Process install dependency map
Starting collection install process
Installing 'sensu.sensu_go:1.7.1' to
  '/home/user/.ansible/collections/ansible_collections/sensu/sensu_go'

但是找到您需要的 Ansible 集合并审查其内容是更难的部分。

如何选择 Ansible 集合

在单体 Ansible 的旧时代,使用第三方 Ansible 模块和插件并非易事。因此,大多数用户使用其 Ansible 版本捆绑的任何内容。

安装 Ansible 集合的能力让您可以更好地控制在 Ansible playbook 中使用的内容。您可以安装核心 Ansible 引擎,然后为其配备您需要的模块、插件和角色。但是,正如常言道,能力越大,责任越大。

现在,用户完全负责他们用于构建 Ansible playbook 的内容的质量。但是,如何将高质量内容与其余内容区分开来?以下是在评估 Ansible 集合时需要检查的五个事项。

1. 文档

一旦您在 Ansible Galaxy 上找到潜在的候选对象,请首先检查其文档。在理想情况下,每个 Ansible 集合都会有一个专门的文档站点。例如,Sensu Go 和 F5 Networks Ansible 集合就拥有文档站点。大多数其他 Ansible 集合仅附带 README 文件,但是一旦文档工具成熟,这种情况将会得到改善。

Ansible 集合的文档应至少包含一个带有安装说明的快速入门教程。文档的这一部分旨在让用户在几分钟内启动并运行。例如,Sensu Go Ansible 集合有一个专门的快速入门指南,而 Sops Ansible 集合在其 README 文件中包含了此信息。

文档的另一个重要部分是详细的模块、插件和角色参考指南。集合作者并不总是将这些指南发布在互联网上,但它们应该始终可以通过 ansible-doc 工具访问。

$ ansible-doc community.sops.sops_encrypt
> SOPS_ENCRYPT    (/home/tadej/.ansible/collections/ansible>

        Allows to encrypt binary data (Base64 encoded), text
        data, JSON or YAML data with sops.

  * This module is maintained by The Ansible Community
OPTIONS (= is mandatory):

- attributes
        The attributes the resulting file or directory should
        have.
        To get supported flags look at the man page for
        `chattr' on the target system.
        This string should contain the attributes in the same
        order as the one displayed by `lsattr'.
        The `=' operator is assumed as default, otherwise `+'
        or `-' operators need to be included in the string.
        (Aliases: attr)[Default: (null)]
        type: str
        version_added: 2.3
...

2. Playbook 可读性

Ansible playbook 应该充当所需状态的人类可读描述。为了实现这一点,被评估的 Ansible 集合中的模块应具有一致的用户界面和描述性的参数名称。

例如,如果 Ansible 模块与 Web 服务交互,则身份验证参数应与其余参数分开。并且所有模块都应尽可能使用相同的身份验证参数。

- name: Create a check that runs every 30 seconds
  sensu.sensu_go.check:
    auth: &auth
      url: https://my.sensu.host:8080
      user: demo
      password: demo-pass
    name: check
    command: check-cpu.sh -w 75 -c 90
    interval: 30
    publish: true

- name: Create a filter
  sensu.sensu_go.filter:
     # Reuse the authentication data from before
    auth: *auth
    name: filter
    action: deny
    expressions:
       - event.check.interval == 10
      - event.check.occurrences == 1

3. 基本功能

在您开始在生产环境中使用第三方 Ansible 内容之前,请务必检查每个 Ansible 模块的基本功能。

可能要寻找的最关键属性是结果。强制状态的 Ansible 模块和角色比其执行操作的对应物更容易使用。这是因为您可以更新您的 Ansible playbook 并重新运行它,而不会冒重大损坏的风险。

- name: Command module executes an action -> fails on re-run
  ansible.builtin.command: useradd demo

- name: User module enforces a state -> safe to re-run
  ansible.builtin.user:
    name: demo

您还应该期望支持检查模式,该模式模拟更改而不实际进行更改。如果您将检查模式与状态强制结合使用,您将免费获得配置漂移检测器。

$ ansible-playbook --check playbook.yaml

PLAY [host] ************************************************

TASK [Create user] *****************************************
ok: [host]

...

PLAY RECAP *************************************************
host        : ok=5    changed=2    unreachable=0    failed=0
                      skipped=3        rescued=0   ignored=0

4. 实现稳健性

如果您以前从未开发过 Ansible 模块或角色,则执行稳健性检查会有点困难。检查持续集成/持续交付 (CI/CD) 配置文件应该让您大致了解测试的内容。在测试套件中找到 ansible-testmolecule 命令是一个很好的迹象。

5. 维护

在您的评估期间,您还应该查看问题跟踪器和开发活动。发现维护人员没有回应的旧问题是 Ansible 集合维护不善的一个迹象。

通过开发活动来判断集合的健康状况有点棘手。过去一年没有提交是 Ansible 集合未维护的明确标志,因为 Ansible 生态系统正在快速发展。每月看到一些提交通常是一个成熟的项目收到及时更新的标志。

物有所值

评估 Ansible 集合并非完全是一项微不足道的任务。希望这些技巧能使您的选择过程更易于管理。找到适合您用例的内容确实需要时间和精力。但是,随着自动化成为几乎所有事物不可或缺的一部分,所有这些努力都是值得的,并且将在未来获得回报。

如果您正在考虑创建自己的 Ansible 集合,您可以从 Steampunk 下载一本免费电子书,其中包含有关构建和维护高质量 Ansible 集成的建议。

接下来阅读
标签
User profile image.
Tadej 是 https://steampunk.si 的 Ansible 技术推广工程师,该团队为供应商构建高质量的 Ansible 集合。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© 2025 open-source.net.cn. All rights reserved.