此文章为「ansible笔记(2)之常用模块」的子文章。
setup 模块可以帮我们收集远程主机的相关信息,例如远程主机的 IP 地址,主机名,系统版本,硬件配置等信息。
以收集 B 主机的相关信息为例,执行下面命令即可:
$ ansible B -m setup
返回信息是一个 json 格式的字符串,内容很长为了方便你阅读我这里就省略返回结果了,ansible 已经将格式化后的 json 信息返回到了控制台中,返回的信息很全面,比如:
ansible_all_ipv4_addresses
:远程主机中的所有 ipv4 地址;ansible_distribution
:远程主机的系统发行版;ansible_distribution_version
:表示远程主机的系统版本号;ansible_<网卡名>
:表示远程主机对应网卡的相关信息;ansible_memory_mb
:表示远程主机的内存配置信息;ansible_distribution_major_version
:显示是系统主版本;ansible_devices
:显示磁盘设备信息;ansible_machine
:显示系统类型,例:32位,还是64位;ansible_hostname
:仅显示主机名;ansible_kernel
:仅显示内核版本;ansible_lvm
:显示lvm相关信息;ansible_memtotal_mb
:显示系统总内存;ansible_memfree_mb
:显示可用系统内存;ansible_swaptotal_mb
:显示总的swap内存;ansible_swapfree_mb
:显示swap内存的可用内存;ansible_mounts
:显示系统磁盘挂载情况;ansible_processor
:显示cpu个数(具体显示每个cpu的型号);ansible_processor_vcpus
:显示cpu个数(只显示总的个数);ansible_python_version
:显示python版本;
返回的信息的确很多,很全面,但是,并不是每一次我们都需要看这么多信息,如果你只是想查看某一类信息,你可以通过关键字对信息进行过滤,比如,我只是想要查看远程主机的内存配置信息,那么我可以使用如下命令:
$ ansible B -m setup -a 'filter=ansible_memory_mb'
上述命令表示通过 ansible_memory_mb
关键字对返回信息进行过滤,如你所见,通过 setup 模块的 filter
参数可以指定需要过滤的关键字,这样 ansible 就只会将 ansible_memory_mb
的相关信息返回。
我们可以也使用通配符,进行相对模糊的过滤,示例如下:
$ ansible B -m setup -a "filter=*mb*"
上述命令表示返回所有包含 mb
的关键字对应的信息。
其实,除了这些信息以外,我们还能够在远程主机中写入一些自定义的信息,这些自定义信息也可以被 setup 模块收集到。
ansible 默认会去目标主机的 /etc/ansible/facts.d
目录下查找主机中的自定义信息,并且规定,自定义信息需要写在以 .fact
为后缀的文件中,同时,这些以 .fact
为后缀的文件中的内容需要是 INI 格式或者是 json 格式的。
那么,我们来创建一个测试文件,测试文件路径为 B 主机的 /etc/ansible/facts.d/testinfo.fact
,在文件中写入如下 INI 格式的信息。
[testmsg]
msg1=This is the first custom test message
msg2=This is the second custom test message
当然,我们也可以使用 json 格式进行配置,比如在 /etc/ansible/facts.d/testinfo.fact
文件中写入如下配置,如下配置与上述配置的效果是相同的,只是书写格式不同。
{
"testmsg":{
"msg1":"This is the first custom test message",
"msg2":"This is the second custom test message"
}
}
通过上述方式,我们可以在目标主机的本地自定义信息,这些在远程主机本地自定义的信息被称为 local facts
,当我们运行 setup 模块时,远程主机的 local facts
信息也会被收集,我们可以通过 ansible_local
关键字过滤远程主机的 local facts
信息,示例命令及结果如下:
$ ansible B -m setup -a "filter=ansible_local"
B | SUCCESS => {
"ansible_facts": {
"ansible_local": {
"testinfo": {
"testmsg": {
"msg1": "This is the first custom test message",
"msg2": "This is the second custom test message"
}
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
如果你把 local facts
信息文件放在了其他自定义路径,在使用 setup 模块时,需要使用 fact_path
参数指定对应的路径,假设,我把 .fact
文件放在了 B 主机的 /testdir
目录下,示例命令如下:
$ ansible B -m setup -a 'fact_path=/testdir'
评论区