说在前面
今天我们要将的是如何获取各大主机的信息呢?
并且在这,也将引入两个模版,以及变量的使用,希望各大读者能够有所收获~
获取所有主机的系统指定信息
先来看一下我定义了哪些主机
$ 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
可以看到,这有个列表,让我们来获取 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模块中展示的系统信息截取的一小部分
让我们获取内存总大小,字典使用的是key-value ,使用下面的方法就能获取相应的系统变量~
"{ { ansible_memory_mb["real"]["total"] }}"
运行获取所有主机的信息:
$ ansible-playbook sys_messages/get_messages.yml
查看获取的主机信息
$ ansible all -a 'cat /tmp/messages'
- 每个文件中的最后两行都是刚才我举的例子
说在后面
说到这,本节内容就结束了~
笑男简单的总结一下:
- template 模块是 jinja2 模板专用,通常就是配置文件,加入一些变量,文件名为 xxx.j2
- copy 模块用于静态不变的文件
- 变量格式: “{ { }}”
- 使用setup模块查看系统信息对应的变量
查看方法: ansible 分组名 -m setup | less
最后笑男再来讲一个玄学,这是我在写博客的时候遇到的,get_messages.yml 文件开始一直都能推成功,后来突然报错,说我语法错误,排错排了一会儿,我坚信语法不可能有错,所以我就干脆将系统充启,然后。。。。又推成功了~
所以遇到玄学问题的时候,就试试重启大法吧~