Python 中的 Ansible

2024 年 8 月 29 日 | 4 分钟阅读

在接下来的教程中,我们将了解 Ansible 及其优势,以及如何在 Python 中使用 Ansible。

Ansible 简介

Ansible 是一个开源平台或自动化工具,用于执行 IT 任务,如部署应用程序、管理配置、协调服务内操作和进行配置。随着信息技术的环境日益复杂,自动化已成为关键。为了快速扩展,开发人员和系统管理员需要协同工作,如果他们必须手动执行每一项功能,这将变得非常困难。自动化有助于简化复杂任务,并使开发人员的工作更易于管理。它还允许开发人员将注意力集中在为组织带来价值的其他活动上。换句话说,自动化通过节省时间来提高效率。如上所述,Ansible 是自动化时代中快速崛起的工具之一。

什么是 Ansible?

  1. Ansible 是一个推送式基础设施即代码 (IaC),它提供了一个用户友好的领域特定语言,我们可以用声明式的方式按需定义架构。
  2. “推送式”一词意味着 Ansible 使用 SSH 在执行 Ansible 的机器与正在应用配置的机器之间进行通信。
  3. 我们希望配置的与 Ansible 一起工作的机器称为托管节点Ansible 主机。在 Ansible 中,主机列表称为清单
  4. 读取定义文件并执行 Ansible 以将配置推送到主机的机器称为控制节点
  5. Ansible 用 Python 编程语言编写,学习曲线非常平缓。设置 Ansible 的过程非常简单,不需要依赖任何额外的应用程序、服务器或客户端守护进程。
  6. Ansible 基于拥抱系统互联性和架构的原则。与其他用于配置管理的工具(如Puppet、ChefSalt)一样,它使用两种类型的服务器:控制机器和节点。
  7. Ansible 使用称为 Ansible 模块的小程序来协调节点。这些模块是在 SSH 上执行的所选系统状态的资源模型。为此,我们不需要任何代理和额外的自定义安全基础设施。
  8. 模块库可以存在于任何机器上。模块通过标准输出上的 JSON 协议执行任务,并使用包括 Python 在内的任何编程语言编写便捷的代码。
  9. 该系统使用 YAML 格式的 Ansible playbook 来描述自动化工作。这样,它既对机器友好,也对人友好。当节点不受 Ansible 管理时,它不会消耗资源,因为没有程序或守护进程在后台运行。

Ansible 的一些优势

作为一个强大的自动化引擎,Ansible 帮助开发人员更高效地部署软件。我们可以避免使用代理、自定义代码或自定义脚本,并主要关注安全性、易审计性、内容审查和重写。与用于软件自动化的类似平台相比,Ansible 具有许多优势。下面将介绍其中一些优势:

  1. 简单性:Ansible 提供了简单性,因为开发人员不需要编写脚本或自定义代码来部署和更新应用程序。它允许使用接近自然语言的语言进行自动化。开发人员、系统管理员和 IT 经理可以轻松地阅读、管理并加快他们的项目和程序。
  2. 完整性:Ansible 还提供了完整性,因为它在一个系统中集成了用于配置管理、应用程序部署、工作流协调甚至云配置的各种复杂工具。模块帮助几乎自动化开箱即用的一切,无需额外的应用程序。
  3. 安全性:Ansible 使用 SSH,因此它不会将易受攻击的代理部署到节点,也不需要在 root 级别或额外端口上运行守护进程。Ansible 提供了一个无代理环境,有助于提高安全性,并且可以作为非 root 用户使用。Ansible 具有内置的操作系统身份验证,支持 LDAP、SSSD 和 Kerberos。

了解用于 Ansible 的 Python API

我们可以通过 Ansible 的应用程序编程接口 (API) 在 Python 中调用 Ansible 代码。Ansible 发布了其 API 的 2.0 版本,它允许与不同编程语言更好地集成。需要注意的是,Ansible 扩展了其功能以支持 Python 开发;然而,在其网站上,它也提到可以自行决定停止支持 API 框架(在当前 API 版本中创建或修复 bug)。

从应用程序编程接口 (API) 的角度来看,开发人员有多种方法可以利用 Ansible。我们可以利用 Python 编程语言的 Ansible API 来控制节点。我们可以扩展 Ansible 以响应 Python 中的不同事件,编写插件,并将插件清单数据从外部数据源读取。

注意:此 API 仅供 Ansible 内部使用。Ansible 可能会随时对本 API 进行更改,这些更改可能会破坏与旧版本 API 的向后兼容性。因此,Ansible 不支持将 Python API 用于任何外部用途。如果我们只想使用 Python API 来执行模块或 playbook,我们首先会考虑使用 ansible-runner。