从0到1的学习Ansible(5)----获取主机各种信息

说在前面

今天我们要将的是如何获取各大主机的信息呢?

并且在这,也将引入两个模版,以及变量的使用,希望各大读者能够有所收获~

获取所有主机的系统指定信息

先来看一下我定义了哪些主机

$ cat hosts 
[node2]
172.25.1.2

[node5]
172.25.1.5

[localhost]
172.25.1.1

[client:children]   #client 分组有两个子分组,node2 和 node5
node2
node5

建立一个目录,专门用于管理获取系统信息的 yml 文件

$ mkdir sys_messages

编写 yml 文件

$ cat sys_messages/get_messages.yml 
---
- hosts: all
  tasks:
  - name: use template
    template:				# template 模块
      src: messages.j2      # 后缀为 j2 代表是模版文件,jinja2模版
      dest: /tmp/messages

创建 templates 目录,和我之前讲的 files 目录一样,只不过 files 目录对应的是 copy,而 templates 对应的是 template 模块。

  • copy 一般对应的是普通的静态文件,放在 files 目录下
  • template 对应的是模版,一般模版里会使用变量,为了方便管理以及识别,模版文件一般叫 xxx.j2 ,放于 templates 目录下。
$ mkdir sys_messages/templates

编写获取主机信息的模版文件

  • 在这我得多交代几句,帮助各位读者学会如何使用变量去取系统信息,以及如何获取变量
  • ansible 有一个模版,叫 setup ,这个模版可以去查看系统信息所对应的变量
    你可以使用 ansible localhost -m setup | less 去逐页查看,或者像使用vim那样去搜索关键字查询~
    你可以看到,里面基本上是字典或者列表;{ }括起来的是字典,通过键值对来获得信息; [ ]括起来的是列表,通过切片来获得信息,如果你学过python,那么这对你来说简直不要太简单~即便是没学过,也没有关系,笑男给你举例子,给你解释~
$ cat sys_messages/templates/messages.j2 
主机名: "{ { ansible_hostname }}"
操作系统版本: "{ { ansible_distribution }}" "{ { ansible_distribution_version }}"
内核版本: "{ { ansible_kernel }}"
系统位数: "{ { ansible_userspace_bits }}"
网卡:"{ { ansible_eth0["device"] }}" 
IP地址: "{ { ansible_eth0["ipv4"]["address"] }}"
子网掩码: "{ { ansible_eth0["ipv4"]["netmask"] }}"
总内存: "{ { ansible_memory_mb["real"]["total"] }}"
内存空闲: "{ { ansible_memfree_mb }}"

上面是整个 jinja2模版文件内容,我挑一个来给大家举例讲解,让读者学会如何获取变量~

示例:

查看 localhost 组的主机的信息,下图为部分展示

$ ansible localhost -m setup | less

《从0到1的学习Ansible(5)----获取主机各种信息》
可以看到,这有个列表,让我们来获取 172.25.1.1 这个IP

    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.122.1", 
            "192.168.219.164", 
            "172.25.1.1", 
            "172.25.254.101"
        ]

获取 172.25.1.1 IP,列表里面的元素第一个是0,依次往后,所以172.25.1.1这个ip是 2,变量的写法是 “{ { }}” ,里面的空格不是必须的,但为了好看,保持个空格更好~

"{ {  ansible_all_ipv4_addresses[2] }}"

这个是列表,在来展示一个字典的写法
这也是从setup模块中展示的系统信息截取的一小部分

《从0到1的学习Ansible(5)----获取主机各种信息》
让我们获取内存总大小,字典使用的是key-value ,使用下面的方法就能获取相应的系统变量~

"{ {  ansible_memory_mb["real"]["total"] }}"

运行获取所有主机的信息:

$ ansible-playbook sys_messages/get_messages.yml

《从0到1的学习Ansible(5)----获取主机各种信息》查看获取的主机信息

$ ansible all -a 'cat /tmp/messages'
  • 每个文件中的最后两行都是刚才我举的例子

《从0到1的学习Ansible(5)----获取主机各种信息》

说在后面

说到这,本节内容就结束了~
笑男简单的总结一下:

  • template 模块是 jinja2 模板专用,通常就是配置文件,加入一些变量,文件名为 xxx.j2
  • copy 模块用于静态不变的文件
  • 变量格式: “{ { }}”
  • 使用setup模块查看系统信息对应的变量
    查看方法: ansible 分组名 -m setup | less

最后笑男再来讲一个玄学,这是我在写博客的时候遇到的,get_messages.yml 文件开始一直都能推成功,后来突然报错,说我语法错误,排错排了一会儿,我坚信语法不可能有错,所以我就干脆将系统充启,然后。。。。又推成功了~
所以遇到玄学问题的时候,就试试重启大法吧~

    原文作者:小白网管之路
    原文地址: https://blog.csdn.net/weixin_44297303/article/details/103409673
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞