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这类临时文件系统的统计信息,或者针对特定挂载点的筛选。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingyu飞鸟

醒来觉得甚是爱你。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值