zl程序教程

您现在的位置是:首页 >  系统

当前栏目

ansible的setup模块和Facts变量及magic变量

模块变量 Ansible setup Magic
2023-09-14 09:15:56 时间

Host Factsbianl

ansible收集的系统信息保存在特定的变量中

在这里插入图片描述

变量注释示例
ansible_distribution发行版ansible_distribution == “RedHat”
ansible_distribution_major_version操作系统版本ansible_distribution_major_version == “8”
ansible_kernel内核版本ansible_kernel == “3.10.0.327.e17.x86_64”

在这里插入图片描述


示例剧本

---
- name: 演示facts变量
  hosts: all
  tasks:
    - name: 用户facts信息
      copy:
        content: "主机名是:{{ ansible_hostname }},\nbios版本是:{{ ansible_bios_version }}\n"
        dest: /tmp/facts.txt

执行结果
在这里插入图片描述


setup模块

ansible_facts用于采集被管理设备的系统信息,例如CPU,内存,磁盘
所有收集到的信息都被保存在变量中
每次执行playbook默认第一个任务就是Gathering Facts
如果不需要Facts变量,关闭Facts变量可以提高playbook运行速度

关闭收集Facts变量
在这里插入图片描述

---
- name: 关闭Facts变量演示
  hosts: all
  gather_facts: no
  tasks:
    - name: 演示无Facts变量
      setup:

setup常用的变量

在这里插入图片描述


使用setup模块可以查看收集到的facts的信息

ansible node1 -m setup

在这里插入图片描述

对收集的信息进行过滤

[rhel8 root ~/ansible/play]# ansible all -m setup -a "filter=ansible_mem*"
node1 | SUCCESS => {
    "ansible_facts": {
        "ansible_memfree_mb": 631,
        "ansible_memory_mb": {
            "nocache": {
                "free": 1392,
                "used": 398
            },
            "real": {
                "free": 631,
                "total": 1790,
                "used": 1159
            },
            "swap": {
                "cached": 0,
                "free": 2047,
                "total": 2047,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 1790
    },
    "changed": false
}

playbook调用debug模块使用变量获取节点信息

---
- hosts: node2
  gather_facts: False
  tasks:
    - name: 查看节点ip
      debug:
    # var是常量
        var: ansible_all_ipv4_addresses
    - name: 查看节点的bios版本
      debug:
        msg:  "bios版本是{{ansible_bios_version}}"
    - name: 查看节点的主机名
      debug:
    # msg中的变量需要用{{}}括起来
        msg: "主机名是:{{ansible_hostname}}"
    - name: 查看节点的总内存
      debug:
        msg: "总内存大小:{{ansible_memtotal_mb}}"
    - name: 查看节点的指定分区大小
      debug:
        msg:  "分区大小是:{{ansible_devices.nvme0n2.partitions.nvme0n2p1.size}}"

palybook执行结果

[rhel8 root ~/ansible/play]# ansible-playbook yum.yaml 

PLAY [node2] ***********************************************************************************************************

TASK [查看节点ip] ******************************************************************************************************
ok: [node2] => {
    "ansible_all_ipv4_addresses": [
        "192.168.32.136",
        "192.168.32.137"
    ]
}

TASK [查看节点的bios版本] **********************************************************************************************
ok: [node2] => {
    "msg": "bios版本是6.00"
}

TASK [查看节点的主机名] ************************************************************************************************
ok: [node2] => {
    "msg": "主机名是:node2"
}

TASK [查看节点的总内存] ************************************************************************************************
ok: [node2] => {
    "msg": "总内存大小:1790"
}

TASK [查看节点的指定分区大小] ******************************************************************************************
ok: [node2] => {
    "msg": "分区大小是:1023.00 MB"
}

PLAY RECAP *************************************************************************************************************
node2                      : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

自定义Facts变量

ansible_local 这个变量是可以自定义的


在node上创建自定义facts变量文件

在node主机上的/etc/ansible/facts.d目录下,创建一个test.fact文件

# 在node上创建facts.d目录
mkdir -p /etc/ansible/facts.d

# 创建自定义facts变量文件
vim /etc/ansible/facts.d/test.fact

# 写入自定义变量内容
[pkg]
web_pkg=httpd

测试自定义facts变量

# 将setup结果写入serverc1.json
ansible serverc.lab.example.com -m setup > serverc1.json

查看收集到的ansible_localhost变量的值

在这里插入图片描述

使用playbook测试自定义fatsc变量

示例剧本

---
- name: 自定义fatsc变量
  hosts: serverc.lab.example.com
  tasks:
    - name: 无Facts变量演示
      debug:
        var: ansible_local.test

剧本执行效果

[student@workstation facts]$ ansible-playbook test.yml

PLAY [自定义fatsc变量] ****************************************************************************

TASK [Gathering Facts] ***********************************************************************
ok: [serverc.lab.example.com]

TASK [无Facts变量演示] ****************************************************************************
ok: [serverc.lab.example.com] => {
    "ansible_local.test": {
        "pkg": {
            "web_pkg": "httpd"
        }
    }
}

PLAY RECAP ***********************************************************************************
serverc.lab.example.com    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

magic变量

magic变量就是主机和主机组变量
生产环境下,有可能你的node主机的hostname是aaa,但你在控制节点的主机清单中写入的主机名是servera,经常需要使用magic变量中的主机清单主机名来判断.

打印出主机清单中的主机名

生产环境中用的最多的是主机清单中的主机名这个变量

# 查看magic变量
ansible serverc.lab.example.com -m debug -a "var=hostvars['serverc.lab.example.com']"

inventory_hostname 是主机清单中的主机名
inventory_hostname_short 是主机清单中的短主机名

在这里插入图片描述


RHCE8考题

在这里插入图片描述