RedHat9 | Ansible 管理事实

环境版本说明

  • RedHat9 [Red Hat Enterprise Linux release 9.0]
  • Ansible [core 2.13.3]
  • Python [3.9.10]
  • jinja [3.1.2]

1. 介绍Ansible-fact

Ansible 事实是Ansible在受管主机上自动检测到的变量。事实中含有与主机相关的信息,可以像play中常规变量、条件、循环或依赖于从受管主机收集的值的任何语句一样使用。

在受管主机收集的一些事实包括

  • 主机名称
  • 内核版本
  • 网络接口名称
  • 网络接口IP地址
  • 操作系统版本
  • CPU数量、提供的内存、可用内存
  • 存储设备的大小和可用空间

借助事实可以方便的检索受管主机的状态,并根据状态确定要执行的操作

  • 根据含有受管主机当前内核版本的事实运行条件任务,以此重新启动服务器
  • 根据事实报告的可用内容来定义MySql配置文件
  • 根据事实的值设置配置文件中使用的IPv4地址

每个Play在执行第一个任务之前会先自动运行setup模块来收集事实,在Ansible2.3中报告为gathering Facts任务,在更早版本中报告为setup。默认情况下,不需要再play中运行setup任务,setup任务会自动运行。

查看受管主机收集的事实

  • 使用 ad-hoc 方式运行 setup 模块
  • 使用 playbook 运行 debug 模块并提取变量 var: ansible_facts

playbook运行过程

在这里插入图片描述

Ansible事实示例

事实变量
ansible_hostname主机名
ansible_fqdnFQDN完全合格域名
ansible_nodename节点名称
ansible_default_ipv4.addressIPv4地址
ansible_lvmlvm逻辑卷
ansible_devices.vda.partitions.vda1.size/dev/vda1分区大小
ansible_kernel内核信息
ansible_dns.nameserversdns信息

2. 临时收集事实

使用 ad-hoc 方式临时收集事实

ansible serverb -m setup

在这里插入图片描述

临时事实过滤后输出,过滤选项需要格式为【ansible_*】,否则过滤可能会失效

ansible serverb -m setup -a filter=ansible_default_ipv4

在这里插入图片描述

ansible serverb -m setup -a filter=address

在这里插入图片描述

3. Playbook收集事实

输出全部事实,playbook内容如下:

---
- name: play1
  hosts: serverb
  tasks:
  - name: Print facts
    ansible.builtin.debug:
      var: ansible_facts

在这里插入图片描述

输出指定事实,playbook内容如下:

---
- name: paly1
  hosts: serverb
  tasks:
  - name: Print facts
    ansible.builtin.debug:
      var: ansible_facts.default_ipv4
# var的两种显示方法
# 1. var: ansible_facts.default_ipv4
# 2. var: ansible_default_ipv4

在这里插入图片描述

4. 关闭事实

关闭事实的场景

  • 没有使用任何事实,希望加快playbook运行速度或减少play在受管主机上的负载
  • 受管主机无法运行 ansible.builtin.setup 模块

[Setup1]:编写一个nofacts.yml文件,文件内容如下

---
- name: play1
  hosts: serverb
  gather_facts: off			# 关闭事实[on/off | trust/false]
  tasks:
  - name: Print Hello World
    ansible.builtin.debug:
      msg: Hello World

在这里插入图片描述

也可以在配置文件中的全局关闭事实

vim ~/ansible/ansible.cfg

# 修改下列选项
gathering=explicit

5. 魔法变量

ansible会自动设置一些特殊变量,这些特殊变量也可以用于获取与特定受管主机相关的信息。魔法变量的名称保留,不能使用该名称来定义变量。

hostvars魔法变量

hostvars是Ansible中最常用的魔法变量之一,它允许你在剧本的任何地方访问为剧本中任何主机定义的变量。使用hostvars,你可以轻松地引用其他主机的变量,这在跨主机配置或数据共享时非常有用。例如,如果你需要在某个任务中使用另一台主机的IP地址或特定配置,你可以通过hostvars来实现。

魔法变量作用
inventory_hostname列出在清单中的主机名
group_names列出当前主机在清单中的归属组
groups列出清单中所有主机名称,以及在清单中的归属组
hostvars列出系统的所有魔法变量及所有事实变量

使用 ad-hoc 方式临时查看清单中特定主机的主机名

ansible serverb -m debug -a var=inventory_hostname

在这里插入图片描述

使用 ad-hoc 方式临时查看当前主机在清单中的归属组

ansible serverb -m debug -a var=group_names

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meaauf

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值