IT咨询服务Linux自动化运维

puppet的fact机制是什么,如何利用fact

参与11

3同行回答

galaxy1975galaxy1975系统架构师自动化运维专家
简单来说,fact就是puppet的一个组件,这个组件以一堆ruby脚本的形式存在在被管理服务器上,每次运行puppet命令的时候,都会先执行这一堆脚本,获得一堆变量=>值对,然后返回给服务器。可以在一个安装了puppet的服务器上执行facter命令:[root@fm-server ~]# facterarchitecture => x8...显示全部

简单来说,fact就是puppet的一个组件,这个组件以一堆ruby脚本的形式存在在被管理服务器上,每次运行puppet命令的时候,都会先执行这一堆脚本,获得一堆变量=>值对,然后返回给服务器。

可以在一个安装了puppet的服务器上执行facter命令:

[root@fm-server ~]# facter

architecture => x86_64

augeasversion => 1.0.0

bios_release_date => 12/01/2006

bios_vendor => innotek GmbH

bios_version => VirtualBox

......

interfaces => eth0,lo

ipaddress => 192.168.56.30

ipaddress_eth0 => 192.168.56.30

ipaddress_lo => 127.0.0.1

is_virtual => true

kernel => Linux

kernelmajversion => 3.8

kernelrelease => 3.8.13-44.1.1.el6uek.x86_64

kernelversion => 3.8.13

...

具体脚本的位置在:/usr/lib/ruby/site_ruby/1.8/facter/ 这个目录中,有兴趣的同学可以自己看看

收起
IT咨询服务 · 2016-03-31
浏览2914
galaxy1975galaxy1975系统架构师自动化运维专家
系统默认了将近100个fact变量,实际上我们也可以自己扩展自己需要的fact变量,扩展fact有4种方法:1. 直接在/usr/lib/ruby/site_ruby/1.8/facter/目录中自己写一个fact脚本,看看其他的怎么写的,比划着写就行了2. 自己随便找个目录,把你自己的ruby脚本放到哪个目录中,然后定义变量:e...显示全部

系统默认了将近100个fact变量,实际上我们也可以自己扩展自己需要的fact变量,扩展fact有4种方法:

1. 直接在/usr/lib/ruby/site_ruby/1.8/facter/目录中自己写一个fact脚本,看看其他的怎么写的,比划着写就行了

2. 自己随便找个目录,把你自己的ruby脚本放到哪个目录中,然后定义变量:export FACTERLIB=/mypuppet/myfact/,脚本写法同上

3. fact支持外部fact,这个定义写在了/usr/lib/ruby/site_ruby/1.8/facter/util/config.rb文件中:

@external_facts_dirs = ["/opt/puppetlabs/facter/facts.d",

                                "/etc/facter/facts.d",

                                "/etc/puppetlabs/facter/facts.d"]

吧你的fact定义放到那些目录中(可能需要自己创建),fact定义支持txt、yaml、json、sh四种方式,我比较喜欢用sh:

[root@fm-server ~]# mkdir -p /etc/facter/facts.d

[root@fm-server ~]# cd /etc/facter/facts.d/

[root@fm-server facts.d]# vi test.sh

#!/bin/bash

echo "testfact=Test"

[root@fm-server facts.d]# chmod 755 test.sh

[root@fm-server facts.d]# facter |grep test

testfact => Test

4. 用pluginsync发布,这个方法我用的很少,因为太麻烦了,我是极简主义者

对于自定义facter,大家可以参考

https://docs.puppetlabs.com/facter/3.1/fact_overview.html

收起
IT咨询服务 · 2016-03-31
浏览2735
galaxy1975galaxy1975系统架构师自动化运维专家
找到了这个机制,我们如何利用facter呢? 通常来说,有2个用法:1. 使用fact变量来实现配置的自动调节例如apache服务器,希望按照cpu的核数调整并发的进程数fact变量中有一个:[root@fm-server ~]# facter |grep processphysicalprocessorcount => 1processor0 => Intel(R) Core(TM)...显示全部

找到了这个机制,我们如何利用facter呢? 通常来说,有2个用法:

1. 使用fact变量来实现配置的自动调节

例如apache服务器,希望按照cpu的核数调整并发的进程数

fact变量中有一个:

[root@fm-server ~]# facter |grep process

physicalprocessorcount => 1

processor0 => Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz

processorcount => 1

processors => {"physicalcount"=>1, "count"=>1, "models"=>["Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz"]}

就可以在apache的puppet类中写:

                                                                                                                                                                                               

                                               

StartServers <%= @processorcount.to_i*12 %>

                                       

                               

                       

               

这样不同的服务器的apache的启动进程就不同了


2. 利用fact收集想收集的信息

这个在自定义配置中已经讲了方法,反正是shell脚本,你想干啥就干啥,

foreman会把fact入库,你可以很方便的通过api或者直接访问数据库来获得你想要的数据

收起
IT咨询服务 · 2016-03-31
浏览2637

提问者

galaxy1975
系统架构师自动化运维专家

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-03-31
  • 关注会员:1 人
  • 问题浏览:6993
  • 最近回答:2016-03-31
  • X社区推广