当前位置: 首页 > news >正文

ansible学习之 Facts

Facts 是什么:

在Ansible中,Facts是关于目标主机的信息,这些信息由Ansible在执行任务之前收集。Facts是特定于主机的,它们提供了系统级的数据,例如操作系统类型、内核版本、IP地址、已安装的包列表等。这些信息可以用来在playbook中做出决策,例如,使用条件语句或变量来应用不同的配置,这些变量可以在任务和模板中使用。

如何手动获取 远程系统的数据

通常facts中的数据是由Ansible中的 ‘setup’模块自动发现的,我们可以调用setup模块来获取远程主机的信息。

# 192.168.0.187 远程主机名或者组
# ansible 192.168.0.187 -m setup
.....	# 信息巨多这里就省略掉了

如何关闭Facts

收集信息会减慢 ansible 或者 ansible-playbook 的执行速度,如果你不需要用到 facts,你可以把它关闭掉。

1. 使用ad-hoc时关闭facts:

# ansible all -m ping  -e "gather_facts=False"  
  • -e : 传递参数给 模块

2. 在使用ansible-playbook 时关闭facts

---            
- hosts: allgather_facts: notasks:- name: test connectping:
  • gather_facts: no : 全局生效

3. 配置文件中,关闭facts信息收集

# cat /etc/ansible/ansible.cfg
gathering = False

使用ansible-playbook 调用facts中的数据

- hosts: alltasks:- name: Print the hostname of the remote systemdebug:var: ansible_nodename
[root@localhost ~]# ansible-playbook ping-playbook.yaml PLAY [all] **************************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.187]TASK [Print the hostname of the remote system] **************************************************************************************************************
ok: [192.168.0.187] => {"ansible_nodename": "idealpxe"
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.187              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • var:ansible_nodename 打印变量的值
  • var: ansible_facts 打印所有事务

扩展 debug模块介绍

Ansible中的debug模块是一个用于输出变量值或执行其他调试任务的非常有用的模块。它通常用于以下目的:

  • 打印变量值:在执行过程中,如果你想查看某个变量的值,可以使用debug模块打印出来。
  • 调试任务:如果你需要调试任务,debug模块可以用来打印任务执行过程中的中间状态或结果。
  • 消息通知:debug模块可以用来向用户显示消息或通知。
  • 条件调试:结合when条件,debug模块可以只在满足特定条件时执行.
  • 测试和开发:在开发和测试Ansible playbook时,debug模块可以帮助你理解代码的执行流程。

案例一、打印消息,使用msg参数

- hosts: alltasks:- name:  Debug taskdebug:msg: "This is a debug message"
PLAY [all] **************************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.187]TASK [Debug task] *******************************************************************************************************************************************
ok: [192.168.0.187] => {"msg": "This is a debug message"
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.187              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • msg:用于输出一条消息。

输出消息时解释变量

- hosts: alltasks:- name:  print remote hostnamedebug:msg: "Hostname is {{ansible_nodename}}"
PLAY [all] **************************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.187]TASK [print remote hostname] ********************************************************************************************************************************
ok: [192.168.0.187] => {"msg": "Hostname is idealpxe"
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.187              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • 在消息中调用变量需要使用 “{{}}”,双引号也不能少。ansible_nodename 变量是调用facts 事务中的,所有事物一定要打开,也可以换一种方式调用变量如下:
- hosts: alltasks:- name:  print remote hostnamedebug:msg: "The hostname of the target system is {{ ansible_facts['hostname'] }}"

案例二、打印变量使用 var 参数

变量同样来自事务,所有事务需要打开

- hosts: alltasks:- name:  print remote hostnamedebug:var:  ansible_facts['hostname']

或者

- hosts: alltasks:- name:  print remote hostnamedebug:var: ansible_nodename 
  • var参数是直接打印变量的值,不需要引用

相关文章:

  • 平安养老险肇庆中心支公司开展“2024年金融教育宣传月”活动
  • matlab-批处理图像质量变化并形成折线图 (PSNR)
  • HarmonyOs 查看官方文档使用弹窗
  • 【C/C++】错题记录(二)
  • 0代码、自动化,让AI视觉算法赋能千行百业(含源代码)
  • 敢不敢动手?AI绘画+表情包制作,7步搞定超萌表情!
  • Linux Mint急救模式
  • (undone) MIT6.824 Lab1
  • 【华为HCIP实战课程二】OSPF基础介绍和OSPF RID NBMA配置详解
  • zy89、90_C#中字符串及控制字符串的常用函数
  • vue3中动态引入组件并渲染组件
  • DC00023基于jsp+MySQL新生报到管理系统
  • 聊一聊大模型六小虎生存现状!
  • 8.代码风格调试%结课竞赛
  • 大厂面试真题:简单说下Redis的bigkey
  • exif信息对照
  • FastReport在线报表设计器工作原理
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • spring学习第二天
  • 分享一份非常强势的Android面试题
  • 基于 Babel 的 npm 包最小化设置
  • 使用common-codec进行md5加密
  • 数组的操作
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (13)Hive调优——动态分区导致的小文件问题
  • (7) cmake 编译C++程序(二)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (笔记)M1使用hombrew安装qemu
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (七)理解angular中的module和injector,即依赖注入
  • (全注解开发)学习Spring-MVC的第三天
  • (五)网络优化与超参数选择--九五小庞
  • (转)iOS字体
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .form文件_一篇文章学会文件上传
  • .net core 的缓存方案
  • .NET Core 中的路径问题
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net7 环境安装配置
  • /proc/stat文件详解(翻译)
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [C/C++]关于C++11中的std::move和std::forward
  • [C/C++入门][字符与ASCII码]6、用代码来转换字符与它的ASCII码