金鱼哥戏说RHCE认证:管理变量和事实--管理事实和魔法变量

简介: 第四章 管理变量和事实--管理事实和魔法变量
🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL、PMP😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


Ansible体系文章,IT民工金鱼哥希望能以通俗易懂、诙谐幽默的方式给大家呈现这些枯燥的知识点,让繁重的学习变的有趣一些。

📜1. 前言描述

在Ansible执行时,默认总有一个任务会先运行,那就是Gathering Fact:

TASK [Gathering Facts] ****************************************
ok: [192.168.xxx.xxx]

从输出内容来看,这是执行了一个名为Gathering Facts的TASK,但其实我们并没有在命令中或者剧本中定义这个任务,这个是Ansible设计的初衷,默认情况自动执行。


📜2. Ansible Facts简介

Ansible Facts(事实)是Ansible在受管主机上自动检测到的变量。而Facts组件是Ansible用于采集被管理机器设备信息的一个功能,采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等。

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

所以在一些业务场景中, Ansible Facts对我们使用是很有帮助的,直接调用以大大提高了工作效率。

22


📜3. Ansible facts示例

可以使用setup模块获取被管理机器的所有facts信息,可以使用filter来查看指定的信息。setup模块获取的整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最外层的值。我们可以通过以下Ansible Ad-Hoc命令查看facts信息:

[root@servera ~]# ansible localhost -m setup
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.159.111"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::2a9:fbb5:c93:84f8"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "07/29/2019", 
        "ansible_bios_version": "6.00", 
        "ansible_cmdline": {
............

📜4. 过滤Facts变量

收集到的事实太多而不方便查找的时候,我们可以进行过滤刷选想要的信息:

ansible localhost -m setup -a 'filter=ansible_fqdn'

📜5. 新旧语法对比

前面也提及到,Ansible Facts是Ansible在受管主机上自动检测到的变量,所以当需要调用这些变量的值,就涉及到如何书写的问题,在2.5版本前,是以下表旧的形式来进行调用,虽然官方建议使用新的形式进行编写,但其实两种形式写法都可以(官方未提及是否颓弃旧的写法)。

ANSIBLE_FACTS 形式 旧事实变量
ansible_facts['hostname'] ansible_hostname
ansible_facts['fqdn'] ansible_fqdn
ansible_facts['default_ipv4']['address'] ansible_default_ipv4['address']
ansible_facts['interfaces'] ansible_interfaces
ansible_facts['devices']['vda']['partitions]['size'] ansible_devices['vda']['partitions]['size']
ansible_facts['dns']['nameservers'] ansible_dns['nameservers']
ansible_facts['kernel'] ansible_kernel

如果变量的值为散列/字典,则可使用两种语法来检索该值。从上表中举两个例子:

ansible_facts['default_ipv4']['address'] 可以写成 ansible_facts.default_ipv4.address
ansible_facts['dns']['nameservers'] 可以写成 ansible_facts.dns.nameservers


📜6. 关闭Facts收集

收集托管主机上的 Facts 比较耗费时间,所以可以在不需要的时候关闭 setup 模块。

关闭facts收集以后,playbook启动的时间会变快

- hosts: dev
  gather_facts: no
  tasks:    
  - debug:
     msg: "closeed facts"

📜7. 魔法变量

有些特殊变量,名为:魔法变量(magic variables)

官网地址:https://docs.ansible.com/ansible/latest/user_guide/playbooks_vars_facts.html#information-about-ansible-magic-variables

常见魔法变量:

  • hostvars

包含受管主机的变量,可以用于获取某台受管主机的变量的值。如果有一台web服务器的配置文件中需要指定db服务器的ip地址,我们假定这台db服务器的hostname为 db.example.com ,ip地址绑定在eth0网卡上,我们可以通过如下方法在web服务器上调用db服务器的ip地址:

{{ hostvars['db.example.com'].ansible_eth0.ipv4.address }}
  • group_names

列出当前受管主机所属的所有组 (用于标识当前正在执行task的目标主机位于的组) 。

  • groups

列出清单中的所有组和主机。

  • inventory_hostname

列出inventory主机清单文件中的主机名称。

其余魔法变量:

77


一眼看上去,完全不明所以,还是通过练习来辅助理解才行:

[student@servera example]$ cat hosts
servera
serverb
serverc
serverd

[dev]
serverb

[test]
serverc

[pro]
serverd

[student@servera example]$ cat ansible.cfg 
[defaults]
inventory = hosts
[student@servera example]$ cat magic.yml 
---
- name: magic vars
  hosts: serverc
  gather_facts: no
  tasks:
    - name: show magic fact inventory_hostname
      debug:
        var: inventory_hostname
# 调用魔法变量inventory_hostname,演示主机清单文件中的主机名称。

    - name: show magic fact groups
      debug:
#        var: groups.test
        var: groups.dev
# 调用魔法变量groups,此处还为散列字典,对应清单中所属的主机组。

    - name: show magic fact group_names
      debug:
        var: group_names
# 调用魔法变量group_names,列出当前受管主机所属的所有组 。

    - name: show magic fact hostvars
      debug:
        var: hostvars.serverb.ansible_forks
# 调用魔法变量hostvars,也为散列字典,需要编写对应主机的相关变量信息。
[student@servera example]$ ansible-playbook magic.yml 

PLAY [magic vars] ***********************************************************************

TASK [show magic fact inventory_hostname] ***********************************************
ok: [serverc] => {
    "inventory_hostname": "serverc"
}

TASK [show magic fact groups] ***********************************************************
ok: [serverc] => {
    "groups.dev": [
        "serverb"
    ]
}

TASK [show magic fact group_names] ******************************************************
ok: [serverc] => {
    "group_names": [
        "test"
    ]
}

TASK [show magic fact hostvars] *********************************************************
ok: [serverc] => {
    "hostvars.serverb.ansible_forks": "5"
}

PLAY RECAP *****************************************************************************************
serverc : ok=4   changed=0   unreachable=0   failed=0   skipped=0   rescued=0   ignored=0

通过上面输出应该比较清晰的了解到魔法变量究竟是怎样的,在日后的使用中,若忘记,也可以直接编写debug模块来进行测试输出。有时候学习需要运用各种方式来辅助自己。

image-20211208170619717


💡总结

  • 理解Ansible Facts的概念和使用场景。
  • 常运用filter选项进行Facts输出的刷选。
  • 新旧语法的对比与运用。
  • 不需要收集事实时,进行关闭。
  • 特殊变量:魔法变量。理解和运用常用的魔法变量。

RHCE认证作为基础认证的升级,需要大家在RHCSA的基础上再进行学习,因此,涉及的基础内容需要大家好好进行学习并巩固。有良好的基础才能更上一层楼。
好好加油,可以噶🤪。

以上就是【金鱼哥】对 第四章 管理变量和事实--管理事实和魔法变量 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

目录
相关文章
|
存储 分布式计算 并行计算
计算存储分离架构
计算存储分离架构
|
Cloud Native Devops 持续交付
【云原生|云原生基础】什么是云原生?一文给你讲清楚!
【云原生|云原生基础】什么是云原生?一文给你讲清楚!
7222 1
|
存储 弹性计算 容灾
华为云从入门到实战 | 云关系数据库备份、恢复及存储容灾服务
主要介绍华为云数据库RDS的备份与恢复部署过程以及SDRS的创建部署过程。
851 0
华为云从入门到实战 | 云关系数据库备份、恢复及存储容灾服务
|
数据可视化 定位技术 Python
基于ArcMap的精美地图可视化绘制--以各省GDP数据为例
大家好,我是志斌~ 今天手把手教大家如何用ArcMap 10.3画分级地图。
2301 0
基于ArcMap的精美地图可视化绘制--以各省GDP数据为例
|
存储 Linux 应用服务中间件
RedHat红帽认证---RHCSA
RedHat红帽认证---RHCSA
617 0
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
922 0
|
Linux iOS开发 MacOS
python的virtualenv虚拟环境常见问题和命令
`venv`是Python的内置模块,用于创建隔离的虚拟环境。创建虚拟环境如`python3 -m venv myenv`,激活环境在Windows上是`./venv/Scripts/activate`,在Unix-like系统是`source myenv/bin/activate`。退出环境用`deactivate`。`pip list`查看已安装包,`pip install`安装包,`pip freeze > requirements.txt`保存依赖。PyCharm中红色`venv`表示项目使用了虚拟环境。
898 2
 python的virtualenv虚拟环境常见问题和命令
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
288 7
|
Web App开发 JavaScript 前端开发
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
本文介绍如何在鸿蒙 Flutter 开发中调试 Webview,包括配置允许调试、找到 devtools 端口、开启端口转发、在 Chrome 中调试 Webview等。
541 0
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
|
供应链 区块链 数据安全/隐私保护
智能合约技术在供应链管理中的应用与挑战####
智能合约,作为区块链技术的重要组成部分,正逐步渗透至供应链管理领域,以其自动化执行协议、增强透明度与效率的特性,重塑着传统供应链的运作模式。本文旨在探讨智能合约如何在供应链中发挥作用,解决现有问题,并分析面临的挑战及可能的解决方案。通过具体案例分析,揭示其在提高供应链透明度、降低成本、加速交易速度等方面的潜力。 ####