温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

puppet的facter使用方法

发布时间:2021-07-26 11:18:09 来源:亿速云 阅读:230 作者:chen 栏目:编程语言

这篇文章主要讲解了“puppet的facter使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“puppet的facter使用方法”吧!

在puppet中有一个很重要的组件template,配合facter模块可以实现按需配置的功能。

facter可以看做是在client端用来收集信息的一个功能组件。其代码目录可以通过

facter |grep dir
rubysitedir => /usr/lib/ruby/site_ruby/1.8  

查看(rb文件),每一个变量对应一个rb文件,rb文件的结构也比较简单,自定义的话也比较方便。

下面简单说几个应用实例:

1.在之前做webcdn自动化的时候,对squid的内存分配做到按照服务器的内存配置做自动化的分配。

cache_mem<%=(memorysize.to_i/2*1024) %> MB

2.在做hadoop的mapred的slot控制时,按照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的模式,同时在自动添加监控的时候,通过zabbix_get来获取hostname的信息,因此zabbix的配置中,主机名必须是fqdn的格式。

Hostname=<%=fqdn %>

4.一个关于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 获取问题导致。

1)查看获取fqdn的相关代码:
/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,然后做链接操作,如果一个为空,则返回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('dnsdomainname') \
      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只有主机名,没有域名的设置,并且/etc/resolv.conf的数字为空,所以最终fqdn的值为空。

解决方法:规范主机名的格式。(因为active模式下要求hosts表中的host需要和zabbix配置一样,如果是更改/etc/resolv.conf的话,可能会导致zabbix数据获取不到值)

感谢各位的阅读,以上就是“puppet的facter使用方法”的内容了,经过本文的学习后,相信大家对puppet的facter使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节
推荐阅读:
  1. puppet 初识
  2. puppet 部署

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI