本文主要是介绍ansible setup模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用于收集有关目标主机的系统和网络信息,并将这些信息存储为一个facts变量,可以在Playbook的后续任务中使用。setup模块可以用来获取主机的操作系统、软件包、IP地址、内存、磁盘和其他硬件信息。这些信息对编写Playbook和进行条件判断非常有用。当你在Playbook或者直接通过Ansible命令行使用setup
模块时,它会返回一个包含目标主机详细信息的JSON结构,这些信息包括但不限于系统架构、网络配置、已安装软件包列表、文件系统、系统变量等。
参数
- gather_subset: 指定要收集的facts子集。默认情况下,Ansible会尝试收集所有可用的facts。可以使用这个参数来限制收集的范围,例如指定"network"来仅收集网络相关的facts。
- gather_timeout: 指定收集facts的超时时间。默认情况下,超时时间是10秒。
- filter: 指定一个过滤器,用于仅返回符合特定条件的facts。可以使用Python语法来构建过滤器,例如"ansible_kernel_version > '4.18'"。
- fact_path: 指定一个目录,用于加载自定义facts。可以在这个目录中放置自定义的Python脚本或脚本文件夹,Ansible会在收集facts时自动加载这些脚本。
- fact_caching: 指定facts的缓存设置。可以将其设置为True以启用缓存,或者设置为一个路径来指定自定义的缓存目录。
使用方法
通过命令行直接使用
你可以在命令行直接运行setup
模块来查看单个或多个主机的信息。
1ansible <hostname_or_group> -m setup
这里,<hostname_or_group>
应该替换为目标主机名或主机组名。
在Playbook中使用
虽然不常见,但你也可以在Playbook中使用setup
模块来收集信息,并将这些信息注册到变量中,之后在Playbook中使用这些变量:
1---
2- name: Gather facts and use them
3 hosts: my_hosts
4 tasks:
5 - name: Gather facts
6 ansible.builtin.setup:
7 register: host_facts
8
9 - name: Display some gathered facts
10 debug:
11 msg: "The OS is {{ host_facts.ansible_facts.os_family }} and distribution is {{ host_facts.ansible_facts.distribution }}"
12
在这个例子中,通过调用ansible.builtin.setup
(或简写为setup
),收集到的信息被注册到了host_facts
变量中,随后可以在后续任务中通过host_facts.ansible_facts
访问这些信息。
注意事项
- Ansible默认在每个Playbook执行开始时自动收集事实(facts),除非你通过
gather_facts: no
在Playbook或Task级别禁用了这一行为。 - 收集事实可能会增加执行时间,特别是在大型环境或网络延迟较高的情况下。
- 你可以通过
filter
参数来限制收集的信息范围,减少不必要的数据传输和处理时间,例如:ansible <hostname> -m setup -a "filter=ansible_network*"
setup
模块是Ansible自动化运维中的基础工具,它为编写灵活、动态的Playbook提供了丰富的信息基础。
获取网络信息。
要在Ansible中专门获取目标主机的网络信息,你可以利用setup
模块并结合过滤功能来聚焦于网络相关事实。以下是如何操作的几个示例:
通过命令行获取网络信息
你可以通过命令行调用Ansible的setup
模块并使用-a
或--args
选项加上filter
参数来筛选网络相关信息:
ansible <hostname_or_group> -m setup -a "filter=ansible_all_ipv4_addresses"
这将只显示目标主机的所有IPv4地址。如果你想获取更多网络细节,可以使用更宽泛的过滤器,如:
ansible <hostname_or_group> -m setup -a "filter=ansible_network*"
这将展示所有与网络相关的事实,包括接口信息、IP地址、网关等。
在Playbook中获取并使用网络信息
在编写Playbook时,你同样可以使用setup
模块并注册变量,然后根据需要访问这些网络信息:
1---
2- name: Gather and display network information
3 hosts: your_host_or_group
4 tasks:
5 - name: Gather facts with network filter
6 ansible.builtin.setup:
7 filter: ansible_network*
8 register: network_facts
9
10 - name: Display network interfaces
11 debug:
12 msg: "{{ network_facts.ansible_facts.ansible_interfaces }}"
13
14 - name: Display IP addresses of eth0
15 debug:
16 msg: "IP addresses of eth0: {{ network_facts.ansible_facts['ansible_' + item]['ipv4']['address'] }}"
17 loop: "{{ network_facts.ansible_facts.ansible_interfaces }}"
18 when: "'eth0' in item"
在这个Playbook示例中,我们首先收集所有网络相关的事实,并注册到network_facts
变量中。然后,分别展示了所有网络接口名称和特定接口(如eth0
)的IPv4地址。
获取内存信息。
命令行示例
直接在命令行使用Ansible调用setup
模块并过滤出内存相关的信息:
ansible <your_host_or_group> -m setup -a "filter=ansible_memory_mb"
这将返回目标主机的内存信息,以MB为单位。
Playbook示例
在Playbook中,你可以通过调用setup
模块并将结果注册到一个变量,随后访问该变量来使用内存信息:
1---
2- name: Gather and Display Memory Information
3 hosts: your_host_or_group
4 tasks:
5 - name: Gather facts with memory filter
6 ansible.builtin.setup:
7 filter: ansible_memory_mb
8 register: memory_facts
9
10 - name: Display total memory in MB
11 debug:
12 msg: "Total Memory: {{ memory_facts.ansible_facts.ansible_memory_mb.real.total }} MB"
13
14 - name: Display free memory in MB
15 debug:
16 msg: "Free Memory: {{ memory_facts.ansible_facts.ansible_memory_mb.real.free }} MB"
在这个示例中,我们首先使用setup
模块并设置了filter
参数为ansible_memory_mb
来专门获取内存信息,并将这些信息注册到memory_facts
变量中。接着,我们通过调试任务输出总内存和可用内存的大小。
获取硬盘空间使用信息。
Playbook示例
下面是一个简单的示例,展示了如何在Playbook中使用setup
模块来获取并显示硬盘空间信息:
1---
2- name: Gather and Display Disk Space Information
3 hosts: your_host_or_group
4 tasks:
5 - name: Gather facts
6 ansible.builtin.setup:
7 register: system_facts
8
9 - name: Display disk space information for each mount point
10 debug:
11 msg: "Mount point: {{ item.mount }} - Total: {{ item.size_total }} KB - Used: {{ item.size_used }} KB - Available: {{ item.size_available }} KB"
12 loop: "{{ system_facts.ansible_facts.ansible_mounts }}"
13 when: item.mount != "/" or item.fstype != "tmpfs" # 可选: 过滤掉不需要的条目,如根分区和tmpfs
在这个Playbook中,我们首先调用了setup
模块,并将收集到的信息注册到了变量system_facts
中。然后,我们通过遍历ansible_mounts
这个变量来访问每个挂载点的磁盘使用信息。这个变量提供了每个磁盘分区或挂载点的详细信息,包括挂载点路径(mount
)、总大小(size_total
)、已用空间(size_used
)以及可用空间(size_available
),所有大小单位默认为KB。
请注意,when
条件是可选的,它用于过滤输出,比如排除tmpfs这类临时文件系统的统计信息,或者针对特定挂载点的筛选。
这篇关于ansible setup模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!