在Ansible中,setup模块是一个非常有用的工具,可以帮助你轻松地收集目标主机的各种系统信息。无论是想了解操作系统的版本、内存容量、CPU性能还是网络配置,setup模块都能为你提供详尽的硬件和软件资源数据。在这篇文章中,我们将一步步带你了解如何使用setup模块来收集主机信息,并且还会对比一下使用ansible命令和ansible-playbook这两种不同方法的优劣。
一、什么是Setup模块?
Ansible的setup模块可以帮你收集远程主机的各种信息,比如操作系统、硬件配置和网络设置等。这样你就能在自动化运维过程中随时了解目标主机的状态。这个模块支持很多不同的系统平台,并且收集到的数据格式统一,方便你后续处理。
setup 模块收集的信息包括:
- 操作系统信息:如版本、发行版等
- 网络信息:如IP地址、网关、DNS配置等
- 内存、CPU配置:如内存总量、CPU核心数等
- 存储信息:如磁盘设备、文件系统等
- 主机名、架构等基本信息。
二、如何使用setup 模块
如果不知道setup的具体用法,可以通过执行ansible-doc setup查看帮助文档,如下图所示:
1. 命令行使用 setup 模块
最简单的方式是直接使用 ansible 命令行工具,调用setup 模块收集目标主机的信息。
示例 1:收集所有主机的系统信息
假设你希望对 all 组中的所有主机收集信息,使用以下命令:
这条命令将会通过SSH登录到目标主机,并返回一个包含各类系统信息的JSON 输出。输出将包括目标主机的操作系统、内存、CPU、网络配置等详细信息。
示例 2:限制收集特定主机组的信息
如果你只对aliyun-server组的主机感兴趣,可以这样写:
该命令只会收集 aliyun-server 组中所有主机的系统信息。结果如下图所示:
2. 命令行使用 setup 模块收集特定信息
你还可以通过 filter 参数来只收集某些特定的事实数据。例如,如果你只关心主机的操作系统版本或内存信息,可以使用如下命令:
示例 3:只收集操作系统信息
该命令会仅返回主机的操作系统相关信息,例如:
示例 4:只收集内存信息
输出将仅显示目标主机的内存信息:
三、使用Playbook 调用setup模块
除了使用Ansible命令行之外,你还可以借助Ansible Playbook来收集系统信息。Playbook是Ansible中非常重要的工具,用于配置管理和自动化任务。它能够帮助你轻松地安排和执行多个任务,并且整个过程会非常清晰有序。希望这个方法对你有帮助!
1. Playbook示例:收集系统信息
以下是一个基本的Playbook示例,演示如何在Playbook中调用setup模块收集信息:
该Playbook会在目标主机上执行setup模块,收集系统信息,然后使用 debug模块显示操作系统的版本。你可以通过以下命令运行该Playbook:
成功执行后返回如下图所示:
2. Playbook 示例:过滤特定信息
你也可以通过filter参数来优化Playbook,只收集特定的系统信息。例如,以下 Playbook仅收集目标主机的内存信息:
运行该Playbook后,它只会返回并显示内存信息。
3. 综合案例
为了根据远程服务器的具体架构上传相应的软件包,我们可以利用Ansible的setup模块来获取服务器的架构信息。然后,通过使用条件判断(例如when子句),我们可以灵活地根据这些信息执行不同的操作。这样不仅提高了效率,还让整个过程变得更加智能和自动化。
以下Playbook实现了上述功能:
如果软件包的文件名和架构信息一致,可以使用变量动态构造路径,上面的yaml文件可以简化如下:
执行以下命令运行该Playbook:
成功执行如下图所示:
四、ansible和playbook那个更好用?
在Ansible中,对setup模块的调用可以通过直接使用Ansible命令行工具或通过Playbook来实现。这两种方法各有特点,在实际应用中根据具体需求选择合适的方式至关重要。
- 直接使用Ansible命令行工具:这种方式适用于需要快速获取目标主机信息的情况。通过执行类似 ansible <host> -m setup 的命令,可以直接查看指定主机上的系统信息、安装软件包等详细数据。这种方法简单快捷,适合于调试或是偶尔需要查看特定主机信息的场景。
- 通过Playbook调用:当涉及到更复杂的配置管理任务时,推荐使用Playbook来组织和自动化整个过程。在这种情况下,可以在Playbook中定义一个或多个任务来调用setup模块,从而收集所需的信息。这种方法不仅能够更好地集成到自动化流程中,而且还支持更高级的功能如条件判断、循环处理等,使得信息收集过程更加灵活可控。
五、总结
setup模块是Ansible里的一个重要工具,用来收集目标主机的各种信息,比如操作系统、硬件配置和网络设置等,让你能快速了解主机的情况。 无论是命令行还是Playbook,它们都能够通过filter 参数精确收集所需的信息,避免不必要的数据冗余。
文章来自:51CTO