ansible setup模块

2024-06-24 02:04
文章标签 模块 ansible setup

本文主要是介绍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模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088883

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

C8T6超绝模块--EXTI

C8T6超绝模块–EXTI 大纲 控制流程结构体分析EXTI实现按键 具体案例 控制流程 这里是流程框图,具体可以去看我STM32专栏的EXTI的具体分析 结构体分析 typedef struct {uint32_t EXTI_Line; // 中断/事件线EXTIMode_TypeDef EXTI_Mode; // EXTI 模式EXTITrigger_TypeDef EXTI_

1、创建多模块的maven springboot项目

现在的java的项目都是多模块的,这次也跟个风。 目标:实现下述结构 项目AcedBoot, 子模块:         aced-api 对外提供接口,         aced-web 给前端提供接口,         aced-service 服务层,         aced-dao 数据底层,包含数据库mapper和实体类entity,         aced-commo

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.