侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible的setup模块

zze
zze
2020-03-28 / 0 评论 / 0 点赞 / 635 阅读 / 3935 字

此文章为「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'
0

评论区