facter是一个以key/value形式收集系统信息的工具。
1 2 3 4 5 |
|
Ansible和Puppet都用它来收集系统信息。
1 2 3 4 5 6 7 8 9 10 |
|
facter是跨平台的,所以可以利用它来获取不同服务器的信息。 比如Ansible中有专门的facter模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
puppet case $::operatingsystem { ‘CentOS’: { include centos } ‘MacOS’: { include mac } }
1 2 3 4 |
|
bash ~> export FACTER_cartman_is_gay=“true” ~> facter | grep cartman cartman_is_gay => true
~> export FACTER_KYLE_MOM_IS_BITCH=“true” ~> facter | grep kyle kyle_mom_is_bitch => true
~> export FACTER_cartman_is_gay=“false” ~> facter | grep cartman cartman_is_gay => false
1 2 |
|
bash [vagrant@localhost ~]$ facter | grep operatingsystem operatingsystem => CentOS operatingsystemrelease => 6.4 [vagrant@localhost ~]$ export FACTER_operatingsystem=“Rock” [vagrant@localhost ~]$ facter | grep operatingsystem operatingsystem => Rock operatingsystemrelease => 2.6.32-358.el6.x86_64 ```
我们老一点的系统都部署在数据中心,所有的服务器的配置用puppet管理,基本上都是虚拟化,基于一个标准的 镜像,标准镜像spin up的服务器中会添加一个自定义的fact,用来判断是否是自定义的系统。我其实不太喜欢 这样的使用方式,首先这让puppet manifest的可读性降低了,找遍整个repo都不找不到在哪里定义的这个变 量,其次,让puppet manifest对系统产生了依赖性,不够灵活。