- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- puppet的facter使用方法
這篇文章主要講解了“puppet的facter使用方法”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“puppet的facter使用方法”吧!
在puppet中有一個(gè)很重要的組件template,配合facter模塊可以實(shí)現按需配置的功能。
facter可以看做是在client端用來(lái)收集信息的一個(gè)功能組件。其代碼目錄可以通過(guò)
facter |grep dir
rubysitedir => /usr/lib/ruby/site_ruby/1.8
查看(rb文件),每一個(gè)變量對應一個(gè)rb文件,rb文件的結構也比較簡(jiǎn)單,自定義的話(huà)也比較方便。
下面簡(jiǎn)單說(shuō)幾個(gè)應用實(shí)例:
1.在之前做web自動(dòng)化的時(shí)候,對squid的內存分配做到按照的內存配置做自動(dòng)化的分配。
cache_mem<%=(memorysize.to_i/2*1024) %> MB
2.在做hadoop的mapred的slot控制時(shí),按照hadoop的mem做slot的分配
<property> <name>mapred.tasktracker.map.tasks.maximum</name> <value><% if memorysize.split(' ')[0].to_i <= 20 %><%=9%><% elsif memorysize.split(' ')[0].to_i > 30 %><%=14%><% end %> </value> </property> <property> <name>mapred.tasktracker.reduce.tasks.maximum</name> <value> <% if memorysize.split(' ')[0].to_i <= 20 %><%=5%> <% elsif memorysize.split(' ')[0].to_i > 30 %><%=9%><% end %> </value> </property> <property> <name>mapred.child.java.opts</name> <value><% 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 %> </value> <final>true</final> </property
3.zabbix配置
因為使用了active的模式,同時(shí)在自動(dòng)添加監控的時(shí)候,通過(guò)zabbix_get來(lái)獲取hostname的信息,因此zabbix的配置中,主機名必須是fqdn的格式。
Hostname=<%=fqdn %>
4.一個(gè)關(guān)于fqdn取值的實(shí)例
在幫qa做puppet的時(shí)候,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 獲取問(wèn)題導致。
1)查看獲取fqdn的相關(guān)代碼:
/usr/lib/ruby/site_ruby/1.8/facter/fqdn.rb
host = Facter.value(:hostname) domain = Facter.value(:domain) if host and domain [host, domain].join(".")
#先取出domain和host,然后做鏈接操作,如果一個(gè)為空,則返回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的執行結果做正則處理
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 #取.之后的數據 elsif domain = Facter::Util::Resolution.exec('domainname') \ and domain =~ /.+/ return_value = domain #獲取dnsdomainname的數據 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
而這臺機器中,host只有主機名,沒(méi)有域名的設置,并且/etc/resolv.conf的數字為空,所以最終fqdn的值為空。
解決方法:規范主機名的格式。(因為active模式下要求hosts表中的host需要和zabbix配置一樣,如果是更改/etc/resolv.conf的話(huà),可能會(huì )導致zabbix數據獲取不到值)
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站