事实介绍
所谓“事实”,就是已经存在的,已经被定义好的。
事实包括:主机名称、内核版本、网络接口、IP地址等 。
打印ansible_facts
执行结果:
将事实全部打印了出来。几乎包含了主机的所有信息。
再playbook上的书写中,通常可以使用字典的形式对事实进行动态调用。
也可以使用 setup模块显示主机信息:
事实的调用
演示:
要求打印本地的ipv4地址,域名信息:
当playbook中没有使用事实时,可以选择禁用收集主机信息(gather_facts: no)来加快playbook执行时间。
创建自定义信息
除了主机信息外,我们也可以自己定义事实:
定义方法:
首先在/etc/ansible下建立存放自定义事实的目录(facts.d),在目录中新建自定义文件,自定义的事实文件必须以.fact结尾才能被系统识别!
方法:INI格式和JSON格式
INI格式更偏向于人阅读的舒适,JSON更易于与机器进行交流。
所以在定义事实时,推荐选择JSON。
新建自定义事实:
新建:/etc/ansible/facts.d/test.fact
定义完成后,保存退出。
使用ansible localhost -m setup
来查看本机事实:
可以看到我们定义的事实:
在使用中需要调用时依旧使用字典的调用方式即可。
魔术变量
hostvars:包含受管主机的变量,可以获取受管主机变量的值。
演示:在本机获取serverc.westos.com主机的值:
group_names:可以列出当前受管主机的所属的主机组。
groups:可以列出当前清单。
inventory_hostname:可以列出清单中配置的当前受管主机的名称。
演示:使用自定义事实的方法安装应启动apache:
思路:
- 第一步:创建自定义事实文件并拷贝)到受管主机的自定义事实目录(受管主机须安装ansible),自定义事实文件中包括安装包名称,服务名称,状态,是否开机启动等信息。
使用file模块建立自定义事实存放目录
使用copy模块将定义的事实文件拷贝到受管主机的自定义事实存放目录。
- 第二步:创建主playbook,在主playbook中进行对apache的安装。 在使用yum模块中,可以直接以字典的形式使用自定义的变量。最终完成安装。
这样的话,大大提高了playbook的复用性。如果安装其他包的时候,就不用修改playbook,直接修改在定义事实文件即可。