什么是 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 模块添加了一个名为“Print output”的新任务。此任务将使用 ansible_facts 变量在“webserver”主机上打印已安装的 httpd 软件包的版本,该变量包含 Ansible 在执行期间收集的关于远程系统的 facts。var 参数指定要打印的变量。在本例中,该参数是 whichansible_facts.packages['httpd'].version。 输出显示 httpd 软件包已在“webserver”主机上成功安装,如“changed”状态所示。然后,“Print output”任务使用 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 |
我们请求您订阅我们的新闻通讯以获取最新更新。