anisble变量二(针对默认收集的信息处理)

当咱们运行一个playbook时,默认都会运行一个名为”[Gathering Facts]“的任务,前文中已经大体的介绍过这个默认的任务。ansible经过”[Gathering Facts]“这个默认任务收集远程主机的相关信息(例如远程主机的IP地址,主机名,系统版本,硬件配置信息),其实,这些被收集到远程主机信息回保存在对应的变量中,当咱们想要使用这些信息时,咱们能够获取对应的变量,从而使用这些信息。json

若是想要查看”[Gathering Facts]“任务收集的信息内容,咱们能够借助一个模块:setup模块bash

当执行playbook时,playbook其实就是自动调用了setup模块从而执行了”[Gathering Facts]“任务,因此咱们能够经过手动执行setup模块查看”[Gathering Facts]“任务收集到的信息。示例以下:ide

#ansible  pro -m setup测试

上面的命令表示收集pro主机的相关信息,执行上述命令后,远程主机pro的相关信息将会输出到ansible主机的控制台上,返回的信息的格式是json格式。debug

返回的信息不少,并非咱们每一次都须要这么多信息,若是你只是想要查看某一些信息,你能够经过关键字对信息进行过滤,好比,我只是想要查看远程主机的内存配置信息,那么我使用以下命令:3d

image.png

除此以外还可使用通配符进行相对模糊的过滤。调试


其实,除了这些信息之外,咱们还能在远程主机中写入一些自定义的信息,这些自定义信息也能够被setup模块收集到。blog

那么咱们应该在哪些定义这些信息呢?内存

ansible默认会去目标主机的/etc/ansible/facts.d目录下查找主机中的自定义信息,而且规定,自定义信息须要写在以”.fact“为后缀的文件中,同时,这些以”.fact"为后缀的问句中的内容须要是INI格式或者是json格式的。it

咱们建立一个测试文件,测试文件路径为pro主机的/etc/ansible/facts.d/testinfo.fact,在文件中写入INI格式,以下:

INI格式以下:

image.png

json格式:

image.png


经过上述方式,咱们能够在目标主机的本地自定义信息,这些在远程主机本地自定义的信息被成为”local facts“,当咱们运行setup模块时,远程主机的”local facts“信息也会被收集,咱们能够经过”ansible_local“关键字过滤远程主机的”local facts“信息,示例命令以下:

image.png

当setup收集远程主机的”local facts“时,默认会查找远程主机的/etc/ansible/facts.d目录,若是将facts信息文件放在了其余自定义路径,在使用setup模块时,须要使用fact_path参数指定对应的路径,假设咱们放在了目录主机的’/testdir‘目录下:命令以下:

#ansible pro -m setup -a "fact_path=/testdir"


另外一个模块,debug模块。

见名知意,debug模块的做用就是帮助咱们进行调试,debug模块能够帮助咱们把信息输出到ansible控制台,以便定位问题。

debug模块的playbook小示例,以下:

image.png

固然,使用debug的msg参数时也能够引用变量的值,这样咱们自定义的信息就更加灵活了,示例以下:

image.png


以前说过playbook在运行默认都会运行"Gathering Facts"任务,而后会收集远程主机的相关信息,这些信息会保存在对应的变量中,咱们在playbook中可使用这些变量,好比“ansible_memory_mb”就是一个变量名,咱们能够在playbook中直接引用名为"ansible_memory_mb",从而获取到远程主机的内存信息,示例以下:

image.png

执行效果以下:

image.png

如上述返回信息因此,ansible_memory_mb中其实包含了”nocache“,”real“,”swap“三个部分的信息,若是咱们只想得到’readl‘部分的信息,在playbook中引用变量时可使用以下两种语法:

语法一:

image.png

语法二:

image.png

其实这些远程主机的信息不单单可以用于输出,咱们经过会获取这些信息之后,对这些信息的值进行判断,若是符合咱们条件,而后再执行下一步动做,好比:先得到远程主机的系统发行版信息,而后判断是什么系统,而后根据不一样的系统进行不一样的操做。

相关文章
相关标签/搜索