這篇文章主要講解了“puppet的facter使用方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“puppet的facter使用方法”吧!
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了華池免費(fèi)建站歡迎大家使用!
在puppet中有一個很重要的組件template,配合facter模塊可以實現(xiàn)按需配置的功能。
facter可以看做是在client端用來收集信息的一個功能組件。其代碼目錄可以通過
facter |grep dir
rubysitedir => /usr/lib/ruby/site_ruby/1.8
查看(rb文件),每一個變量對應(yīng)一個rb文件,rb文件的結(jié)構(gòu)也比較簡單,自定義的話也比較方便。
下面簡單說幾個應(yīng)用實例:
1.在之前做webcdn自動化的時候,對squid的內(nèi)存分配做到按照服務(wù)器的內(nèi)存配置做自動化的分配。
cache_mem<%=(memorysize.to_i/2*1024) %> MB
2.在做hadoop的mapred的slot控制時,按照hadoop的mem做slot的分配
mapred.tasktracker.map.tasks.maximum <% if memorysize.split(' ')[0].to_i <= 20 %><%=9%><% elsif memorysize.split(' ')[0].to_i > 30 %><%=14%><% end %> mapred.tasktracker.reduce.tasks.maximum <% if memorysize.split(' ')[0].to_i <= 20 %><%=5%> <% elsif memorysize.split(' ')[0].to_i > 30 %><%=9%><% end %> mapred.child.java.opts <% if memorysize.split(' ')[0].to_i <= 20 %><%="-Xmx1024m -Xms1024m -Xmn256m -XX:SurvivorRatio=6 -XX:MaxPermSize=128m"%> <% elsif memorysize.split(' ')[0].to_i > 30 %><%="-Xmx1280m -Xms1280m -Xmn256m -XX:SurvivorRatio=6 -XX:MaxPermSize=128m"%><% end %> true 3.zabbix配置
因為使用了active的模式,同時在自動添加監(jiān)控的時候,通過zabbix_get來獲取hostname的信息,因此zabbix的配置中,主機(jī)名必須是fqdn的格式。
Hostname=<%=fqdn %>
4.一個關(guān)于fqdn取值的實例
在幫qa做puppet的時候,agent端報錯:
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template zabbix/zabbix_agentd.conf.erb: Filepath: /usr/lib/ruby/site_ruby/1.8/puppet/parser/templatewrapper.rb Line: 67 Detail: Could not find value for 'fqdn' at 1:/etc/puppet/templates/zabbix/zabbix_agentd_new.conf.erb at /etc/puppet/modules/zabbix/manifests/new.pp:44 on node vlp-flume-111-25 warning: Not using cache on failed catalog err: Could not retrieve catalog; skipping run
可以看到是由于fqdn 獲取問題導(dǎo)致。1)查看獲取fqdn的相關(guān)代碼:
/usr/lib/ruby/site_ruby/1.8/facter/fqdn.rbhost = Facter.value(:hostname) domain = Facter.value(:domain) if host and domain [host, domain].join(".")
#先取出domain和host,然后做鏈接操作,如果一個為空,則返回nil
2)hostname的取值/usr/lib/ruby/site_ruby/1.8/facter/hostname.rb
hostname = nil if name = Facter::Util::Resolution.exec('hostname') if name =~ /(.*?)\./ hostname = $1 else hostname = name end#對hostname的執(zhí)行結(jié)果做正則處理
3)domain的取值/usr/lib/ruby/site_ruby/1.8/facter/domain.rb
hostname_command = 'hostname' can_do_hostname_f = Regexp.union /Linux/i, /FreeBSD/i, /Darwin/i hostname_command = 'hostname -f' if Facter.value(:kernel) =~ can_do_hostname_f if name = Facter::Util::Resolution.exec(hostname_command) \ and name =~ /.*?\.(.+$)/ return_value = $1 #取.之后的數(shù)據(jù) elsif domain = Facter::Util::Resolution.exec('DNSdomainname') \ and domain =~ /.+/ return_value = domain #獲取dnsdomainname的數(shù)據(jù) elsif FileTest.exists?("/etc/resolv.conf") domain = nil search = nil File.open("/etc/resolv.conf") { |file| #或者/etc/resolv.conf中domain|search的配置 file.each { |line| if line =~ /^\s*domain\s+(\S+)/ domain = $1 elsif line =~ /^\s*search\s+(\S+)/ search = $1 end } } return_value ||= domain return_value ||= search end return_value = '' if return_value.nil? return_value.gsub(/\.$/, '') end end而這臺機(jī)器中,host只有主機(jī)名,沒有域名的設(shè)置,并且/etc/resolv.conf的數(shù)字為空,所以最終fqdn的值為空。
解決方法:規(guī)范主機(jī)名的格式。(因為active模式下要求hosts表中的host需要和zabbix配置一樣,如果是更改/etc/resolv.conf的話,可能會導(dǎo)致zabbix數(shù)據(jù)獲取不到值)
感謝各位的閱讀,以上就是“puppet的facter使用方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對puppet的facter使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
新聞標(biāo)題:puppet的facter使用方法
網(wǎng)頁URL:http://weahome.cn/article/jhosed.html