什么是 Ansible 模块2024 年 9 月 19 日 | 阅读 10 分钟 引言Ansible 是一个流行的开源自动化工具。它允许系统管理员和 DevOps 团队自动化各种 IT 任务,例如配置管理、应用程序部署和基础设施配置。Ansible 的一个关键特性是其丰富的模块集合,这些模块是执行特定任务的小型、独立的代码单元。在本文中,我们将探讨 Ansible 模块是什么以及它们如何工作,提供示例,讨论它们的优缺点,并强调它们的常见用例。 什么是 Ansible 模块?在 Ansible 中,模块本质上是用 Python 或任何其他编程语言编写的插件。它用于定义系统的期望状态。这些模块可用于配置、管理和控制远程系统,并提供声明式语言来定义系统的期望状态。Ansible 模块可以执行广泛的任务,例如安装软件包、管理文件、操作配置文件、启动或停止服务、管理用户和组,以及与云平台进行交互等等。 Ansible 模块如何工作?Ansible 模块由 Ansible 控制节点在远程系统上执行。当执行 Ansible playbook 或 ad-hoc 命令后,控制节点会将模块代码和任何必需的参数发送到目标主机。在这里,模块在单独的进程中执行。然后,模块执行指定的任务并将结果返回给控制节点。Ansible 模块遵循“幂等性”方法。这里的幂等性方法意味着它们可以安全地运行多次,而不会在系统已经处于期望状态的情况下更改系统状态。这使得 Ansible 模块在自动化任务中可靠且适用。 使用 Ansible 模块的示例让我们以使用 "yum" 模块为例,该模块是 Ansible 中用于管理基于 Red Hat 的 Linux 系统的软件包的常用模块。以下 Ansible playbook 在远程系统上安装 "httpd" 软件包 代码 输出 ![]() 说明 在上面的代码中,使用 debug 模块添加了一个名为“打印输出”的新任务。此任务将使用 ansible_facts 变量在 "webserver" 主机上打印已安装的 httpd 软件包的版本,该变量包含 Ansible 在执行期间收集的关于远程系统的 facts。var 参数指定要打印的变量。在这种情况下,参数是 whichansible_facts.packages['httpd'].version。 输出显示 httpd 软件包已成功安装在 "webserver" 主机上,这由 "changed" 状态指示。然后,“打印输出”任务使用 ansible_facts.packages['httpd'].version 变量显示已安装的 httpd 软件包的版本,在本例中为 "2.4.41-1ubuntu1.7"。 有用且常见的 Ansible 模块在本节中,我们将了解 Ansible 中使用最多和最有用的模块。此列表中的模块是根据它们在 Ansible 社区中的受欢迎程度以及它们执行日常自动化任务的功能来选择的。 1. 包管理器模块 yum 和 apt它用于调试 Debian/Ubuntu Linux 发行版的 apt 包。下面是更新存储库缓存并更新到最新版本的 Nginx 包的示例。 代码 输出 ![]() 说明 在上面的代码中,我们通过将 <target_hosts> 替换为适当的主机或组来指定将执行任务的目标主机。Playbook 中有两种任务。
2. Service 模块借助此模块,我们可以控制远程主机上的服务,并可以利用不同的 init 系统,具体取决于它们在系统上的可用性。它提供了一个很好的抽象层。 代码 输出 ![]() 说明 在上面的代码中,我们通过将 <target_hosts> 替换为适当的主机或组来指定将执行任务的目标主机。这里我们在 playbook 下定义了一个任务。
3. File 模块它用于处理文件、符号链接和目录的操作。 代码 输出 ![]() 说明 在上面的代码中,我们使用目标主机,通过将 <target_hosts> 替换为适当的主机或组来执行任务。然后,我们在 playbook 下定义了一个任务
4. Copy 模块copy 模块用于将文件复制到远程机器。此外,此模块用于处理远程系统内的文件传输或移动。 代码 输出 ![]() 说明 在上面的代码中,可以通过将 <target_hosts> 替换为适当的主机或组来执行目标主机。然后,我们在 playbook 下定义了一个任务
5. Template 模块此模块用于协助模板,这些模板以 jinja2 模板语言为目标主机。 代码 输出 ![]() 说明 在上面的代码中,目标主机将通过将 <target_hosts> 替换为适当的主机或组来执行任务。然后,我们在 playbook 下定义了一个任务
6. Lineinfile 和 Blockinfile 模块lineinfile 模块用于添加、替换或确保文件路径中存在特定行。当需要更新配置文件中的单行时,使用此模块非常常见。 lineinfile 模块的代码 输出 ![]() 说明 在上面的代码中,目标主机将通过将 <target_hosts> 替换为适当的主机或组来执行任务。然后,我们在 playbook 下定义了一个任务
blockinfile 模块用于从文件中插入、更新或删除一行文本块。它与前面的模块具有相同的功能,但用于需要操作多行文本块的情况。 blockinfile 模块的代码 输出 ![]() 说明 在上面的代码中,目标主机将通过将 <target_hosts> 替换为适当的主机或组来执行任务。然后,我们在 playbook 下定义了一个任务
7. Cron 模块此模块用于管理远程主机上的环境变量和 crontab 条目。 代码 输出 无输出 注意:此任务没有输出要打印,因为它仅配置一个 cron 作业以在指定时间运行脚本。执行任务后,将设置 cron 作业,并根据指定的计划运行脚本。要检查 cron 作业是否正在运行,可以使用 crontab -l 命令列出 crontab 文件中的所有计划作业。说明 此任务将确保 cron 作业配置为每天午夜运行 db_backup_script.sh 脚本,并将输出重定向到 /var/log/db_backup_script.sh.log。 8. Wait_for 模块此模块帮助我们提供一种停止执行 play 并等待条件的方法。它还有助于控制进程完成、文件可用、经过的时间、文件中存在的字符串、端口打开等。 代码 输出 无输出 注意:除非字符串在超时期间未找到而导致任务失败,否则没有输出要打印。如果文件中的字符串被找到,任务将成功完成,并且 playbook 将继续执行下一任务。说明 此任务将等待直到在文件 /tmp/example_file 中找到字符串 "String exists, continue"。如果字符串在默认的 300 秒超时期间内未找到,任务将失败。一旦找到字符串,任务将成功完成,并且 playbook 将继续执行下一任务。 Ansible 模块的用例Ansible 模块可用于广泛的用例。它们如下。
Ansible 模块的优点使用 Ansible 模块有一些优点。它们如下。
Ansible 模块的缺点使用 Ansible 模块也有一些缺点。它们如下。
下一主题Ansible Register |
我们请求您订阅我们的新闻通讯以获取最新更新。