跳至内容

使用统一工具构建 Ansible 集合

本指南演示了一个全面的 Ansible 开发工作流程,它展示了 Ansible 生态系统中各种工具的集成,以创建一个 Ansible 集合。此工作流程中使用的工具包括:

使用 ansible-creator 搭建集合

  • 打开 VS Code 并单击活动栏中的 Ansible 图标以访问 Ansible Creator 部分。单击该部分下的“开始”以打开 VS Code 中 Ansible Creator 的菜单页面。

  • 检查系统要求,如有需要则安装 ansible-creator。确保系统要求框中的所有要求都显示绿色勾号。

  • 单击“初始化集合”以打开“初始化”界面。填写集合名称、初始化路径、详细程度和日志记录选项的表单。单击“创建”以在所需位置搭建集合。您可以选择查看日志或在 VS Code 编辑器中打开日志文件以查看详细信息。

  • 单击打开集合按钮将集合文件夹添加到工作区。

注意:有关在 VS Code Ansible 扩展中使用 Ansible Creator 的更详细说明,请参阅 [doc: ansible-creator]。

使用 ansible-dev-environment 安装集合

  • 在集合结构就位后,使用“ansible-dev-environment”以可编辑模式安装新创建的集合,类似于 Python 模块。

  • 导航到集合目录并运行:

$ ade install -e .
  • 此安装方法会将集合添加到系统路径,以便 Ansible 能够识别它。此外,它还可以通过允许随时更改模块代码来增强开发过程。

  • 您可以使用 ansible-galaxy 命令检查集合是否已安装。在终端中,运行以下命令应该会显示新创建的集合的名称:

$ ansible-galaxy collection list

添加 Python 代码使集合生效

  • 导航到集合目录并导航到 plugins/modules/。添加创建一个 [module-name].py 文件以及模块的文档、示例和逻辑。

  • 由于其使用 pip4a 的安装方法,您可以动态更改模块代码并在 playbook 执行期间观察效果。

注意:有关模块开发的详细信息,请参阅 ansible 模块开发文档

使用 ansible-lint 检查 playbook 中模块的语法

  • 利用 vscode-ansible 扩展和 ansible-lint 可以深入了解集合,而无需运行 playbook。

  • 在“playbooks”目录下创建一个简单的 playbook。

  • 完成使用新创建的集合模块编写 playbook 后,保存文件将自动在 playbook 上运行 ansible-lint。

  • 通过与扩展的集成,ansible-lint 可以检测错误,例如不正确的选项值和缺少必需的选项,以及 ansible 最佳实践的其他规则,方法是在编辑器中提供反馈(红色和黄色波浪线)以及在 vscode 的问题选项卡中提供反馈。

使用 ansible-navigator 运行包含集合模块的 playbook

  • VS Code 中的 Ansible 扩展能够检测 playbook 文件并为其提供多个与 Ansible 相关的选项。其中一个选项是在无需离开编辑器的情况下运行 playbook。

  • 右键单击编辑器中打开的 playbook 并选择通过...运行 Ansible Playbook。这提供了通过 ansible-navigator 或 ansible-playbook 运行 playbook 的选项。

  • 选择通过 ansible-navigator run 运行 playbook以便在 VS Code 中的终端中执行 playbook。

适应模块代码的更改

  • 现在是时候体验一下以可编辑模式安装集合的强大功能了。通过添加新功能和/或修改现有功能来更改模块代码。

  • 重复前两步以观察扩展和 ansible-lint 如何无缝适应这些更改。

  • Ansible 扩展以及 ansible-lint 继续为更新的模块代码提供 lint 功能,并且使用 ansible-navigator 运行 playbook 可以无缝地整合新的模块代码。

这个统一的开发套件,包括 ansible-creator、ansible-dev-environment、ansible-lint、ansible-navigator 和 vscode-ansible 扩展,为内容开发者提供了一种增强且高效的 Ansible 开发工作流程方法。

这些工具的集成简化了开发过程,为构建 Ansible 集合提供了连贯的体验。