《Ansible变量篇:ansible中事实变量facts》

news2025/7/23 22:48:52

一、简介

facts组件是ansible用于采集被管理机器设备信息的一个功能, 采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac地址,时间/日期相关数据,硬件信息等。

ansible有一个模块叫setup,用于获取远程主机的相关信息,并可以将这些信息作为变量在playbook里进行调用,而setup模块获取这些信息的方法就是依赖于fact。

那么话又说回来了,采集这些信息有什么用呢?有的时候我们需要根据远程主机的信息作为执行条件操作。例如,根据远程服务器使用的操作系统版本,可以安装不同版本的软件包;或者也可以显示与每台远程计算机相关的一些信息,例如每台设备上有多少RAM内存可用。

所以,在一些业务场景中,facts对我们是很有帮助的,省去了我们好多工作,大大提高了工作效率。


二、用法

2.1、通过setup查看变量

我们可以使用setup模块获取被管理机器的所有facts信息,可以使用filter来过滤指定的信息。setup模块获取的整个facts信息被包装在一个json格式的数据结构中,ansible_facts是最外层的值。

在这里插入图片描述

由于输出的内容太多,所以这里只贴出部分内容,如下图所示:

在这里插入图片描述

我们可以使用filter参数来查看指定的信息,如下图所示:

在这里插入图片描述

注意:fact变量是通过setup模块来获取的,在playbook中调用的时候要以ansible_xxx开始,往下获取字典中的值,不要误以为是以ansible_facts开始往下取值的,不然会提示没有定义该变量。错误示例:ansible_facts.ansible_all_ipv4_addresses 。


2.2、通过playbook调用变量

运行一个收集事实并使用debug模块显示ansible_facts变量值的简短playbook,如下图所示:

在这里插入图片描述

输出结果,如下图所示:

在这里插入图片描述

Ansible事实变量示例:

事实方式1方式2方式3
短主机名ansible_facts.hostnameansible_facts[‘hostname’]ansible_hostname
完全限定域名ansible_facts.fqdnansible_facts[‘fqdn’]ansible_fqdn
IPv4地址ansible_facts.default_ipv4.addressansible_facts[‘default_ipv4’]['address ']ansible_default_ipv4
所有网络接口的名称列表ansible_facts.interfacesansible_facts['interfaces ']ansible_interfaces
DNS服务器列表ansible_facts.dnsansible_facts[‘dns’]ansible_dns
当前运行的内核版本ansible_facts.kernelansible_facts[‘kernel’]ansible_kernel

2.3、 set_fact跨playbook使用

在前面的playbook中定义的set_fact变量,可以在后面的playbook变量中直接调用。

在这里插入图片描述


三、配置

3.1、关闭set_fact

在Ansible的配置文件中,关于facts的重要配置项有以下几个:

gathering:facts的开关,默认是开启的;有以下三个取值:
	smart:开启facts信息收集,但是会优先使用facts缓存信息,可以使用gather_facts: False禁用facts收集;
	implicit:开启facts信息收集,要禁止收集,必须使用gather_facts: False;
	explicit:关闭facts信息收集,要显式收集,必须使用gather_facts: Ture。
	fact_caching:缓存facts信息的方式;可以配置成jsonfile或者redis;
fact_caching_connection:缓存插件的配置,针对不同的fact_caching方式,取值含义则不同:
	如果fact_caching为jsonfile,则此处应配置存储缓存文件的目录;
	如果fact_caching为redis,则此处应按照host:port:database的格式配置redis的信息。
gather_timeout:收集超时时间,默认为86400;
fact_caching_timeout:设置facts缓存的过期时间,默认是86400秒。

在执行ansible-playbook的时候,会卡一段时间,此时就是主控端在远程获取被控端的fact信息,如果不想从fact中获取变量,或者说整个playbook当中都没有使用到fact变量,可以通过如下方法关闭fact以提升执行效率。

方法一:在playbooks中关闭

在这里插入图片描述

方法二:在ansible.cfg配置文件中关闭

gathering = explicit

3.2、 启动fact缓存

如果在play中需要引入,则可以开启fact缓存。fact缓存目前支持三种存储方式,分别为JSON、memcached、redis。这里就以JSON为例:

vim ansible.cfg
# 加速执行ansible-playbooks
gathering= smart
fact_caching_timeout= 86400 
fact_caching=jsonfile
fact_caching_connection=/dev/shm/ansible_fact_cache

如下图所示:
fact


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】剑指offer代码大集合

剑指 Offer(第 2 版) https://leetcode.cn/problem-list/xb9nqhhg/ 剑指 Offer 03. 数组中重复的数字 https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ # 法1:哈希表(Set) class Solution:def findRepeatNumber(self, nums: [

CentOS8基础篇12:使用RPM管理telnet-server软件包

一、RPM包管理工具简介 RedHat软件包管理工具(RedHat Package Manager,RPM) RPM软件包工具常用于软件包的安装、查询、更新升级、校验、卸载以及生成.rpm格式的软件包等操作。 RPM软件包工具只能管理后缀是.rpm的软件包。软件包的命名格式: 软件名称…

java 实现pgsql数据库免密备份 Windows版本

阐述下背景: 最近公司项目中有个功能模块,需要使用java实现pgsql数据库整库的数据备份,没有pgsql使用经验的我,在网上寻找了好多大神的帖子,也没发现适合自己当前场景的解决方案,但是我把大神们的帖子按照自…

某开源远程办公软件安装配置说明

******是开源软件,只需要简单的配置,就可以在企业搭建SSL VPN,满足日常远程办公的需求。本篇文档为在windows服务器安装搭建openvpn记录,仅供参考。 拓扑说明 使用虚拟机进行测试,主机操作系统Windows 10和m0n0。模拟…

【Java|golang】1247. 交换字符使得字符串相同

有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。 交换只能发生在两个不同的字符串之间…

JavaEE简单示例——MyBatis的缓存机制

简单介绍: 缓存机制的存在,是为了当我们在执行重复的SQL代码的时候,不需要重新向数据库进行访问,而是将之前查询的结果存放在内存当中,从而减少我们重复的获取数据库连接进行查询时候消耗的资源,是一种加快…

内容产品项目作品 || 项目背景及需求分析(一)

一、项目背景介绍 如果让大家来做一个没接触过的产品,思路: 先了解产品所在的行业,多看看第三方的行业研究的文章了解产品的主要竞品,这样做产品设计的时候不会乱搞 常见的内容产品形态:图文、音视频、直播等 二、…

走!来学习配置基于IP子网划分VLAN

划分VLAN的方式有:基于接口、基于MAC地址、基于子网、基于协议、基于策略(MAC地址、IP地址、接口) 基于IP子网划分VLAN经常适用于对安全需求不高、对移动性和简易管理需求较高的场景中。比如,一台PC配置多个IP地址分别访问不同网段…

Traefik v2.9-IngressRoute

文章目录简介资源交付创建CRD和RBAC创建ConfigMap创建Deployment创建Service创建traefik-dashboard-ingressroute简介 The Kubernetes Ingress Controller, The Custom Resource Way. In early versions, Traefik supported Kubernetes only through the Kubernetes Ingress …

Android SurfaceTexture说明

what 1. SurfaceTexture用来捕获视频流中的图像帧,视频流可以是相机预览或者是视频解码数据。 里边承接图像数据的也是GraphicBuffer, GLConsumer 作为其BufferQueue的消费方,取得数据后可以通过eglImage挂到opengles texture 里边对其做纹理采样。 ho…

学习笔记三:容器,镜像相关操作,并部署nginx

这里写目录标题镜像相关命令从dockerhub查找镜像容器相关操作以交互式方式启动并进入容器以守护进程方式启动容器查看正在运行的容器通过docker部署nginx服务在docker里安装nginx创建静态页面访问docker里的nginx服务流量走向:镜像相关命令 从dockerhub查找镜像 d…

mTip 输入法状态跟踪提示 ,可以更改热键等

ImTip ( 输入法状态跟踪提示 )最新版本是 v4.4 :免费开源,仅 715 KB。单文件绿色软件,无任何外部依赖,兼容 XP,Vista,Win7,Win8,Win10,Win11 …… 等所有流行桌面操作系统。源代码: …

Java设计模式笔记——六个创建型模式

系列文章目录 Java设计模式笔记——七大设计原则 文章目录系列文章目录一、简单工厂模式1.概念2.案例分析3.使用简单工厂模式进行改进4.总结二、工厂方法模式1.概念2.案例分析3.使用工厂方法模式进行改进4.总结三、抽象工厂模式1.概念2.案例分析3.使用抽象工厂模式改进4.总结四…

跨端技术或许是提升软件运维效率的利器

凡是代码,难免有 bug。 开发者们的日常,除了用一行行代码搭产品外,便是找出代码里的虫,俗称 debug。 ​随着移动互联网的快速发展,App 已经成为日常生活中不可或缺的一部分。但是在开发者/运维人员的眼里简直就是痛苦…

Win YAPI + Jenkins 实现接口自动化测试

自动化测试 传统的接口自动化测试成本高,大量的项目没有使用自动化测试保证接口的质量,仅仅依靠手动测试,是非常不可靠和容易出错的。 为了解决这个问题,使用YAPI接口自动化测试功能,只需要配置每个接口的入参和对 RE…

网络类型以及数据链路层协议

网络类型以及数据链路层协议网络类型是根据我们数据链路层所运行的协议及规则来划分网络类型的分类P2P --- 点到点 --- point to pointMA --- 多点接入网络BMA --- 广播型多点接入网络NBMA --- 非广播型多点接入网络数据链路层协议MA网络以太网协议特点:需要使用MAC…

Java代码弱点与修复之——Explicit null dereferenced(显式空间接引用)

弱点描述 Explicit null dereferenced, 显示空间接引用。是 Coverity 静态代码分析工具检测到的一种中风险缺陷。这种缺陷通常发生在尝试使用空指针引用调用对象上的方法或访问属性时。 Explicit null dereferenced的缺陷可能会导致程序崩溃或产生不可预测的结果。 在Java语…

0102 MySQL05

1.约束 1.约束(constraint):在创建表时,可以给表中的字段加上一些约束,保证表中数据的完整性,有效性 常见的约束? 非空约束:not null 唯一性约束:unique 主键约束&am…

在VM16.X虚拟机上安装Android-X86 9.0

前提:电脑已安装好VM虚拟机, 第一步:下载好安卓9.0系统 https://www.fosshub.com/Android-x86.html 第二步:开始安装 1、新建虚拟机(按图片上的点一下步) 点浏览,确定虚拟机位置 处理器配置建…

深度剖析C语言预处理

致前行的人: 人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定冷静,学习如何从慌乱中找到生机。 目录 1.程序翻译过程: 2.字符串宏常量 3.用宏定义充当注释符号 4…