foreman架构的引入10-hostgroup如何转换为本地的fact
零基础学习Puppet自动化配置管理系列文档 在Foreman上可以根据业务逻辑设置多个主机组(Host Groups),并且可以将不同的节点加入到不同的主机组,这样在每次操作“puppet run”的时候,只需要在搜索按钮里搜索对应的主机组即可找到里面包含的所有节点,如下图所示 Foreman安装 但是,foreman目前在puppet run上对mcollective的集成度很低,基本就是只能运行一条命令。那么如果要在shell终端上通过mco命令去对这些自定义的Host Groups进行操作应该如何做呢。答案是转换为facter。 自定义facter有四种方式,如下:http://kisspuppet.com/2014/03/30/puppet_learning_base10/ 这里介绍第三种方式将Foreman上设置的主机组(Host Groups)转换为每个节点自己的facter 1、首先创建主机组 Foreman安装 2、查看节点的主机组信息 其实相当于自定义了一个外部变量,变量名叫hostgroup,值为节点加入的组名称 Foreman安装 Foreman安装 3、编写一个fact模块 模块的功能就是将Foreman上的变量“hostgroup”落地到每个节点的/etc/facter/facts.d/${hostname}.txt文件中,内容为fact的标准格式。 #模块结构 [root@puppetmaster162modules]#treefact fact ├──files ├──manifests │├──config.pp │├──fact.pp │├──init.pp │└──params.pp └──templates └──hostgroup.erb 3directories,5files #模块主配置文件init.pp [root@puppetmaster162modules]#catfact/manifests/init.pp classfact{ tag("puppet_env") requirefact::params $hostgroup_erb=$fact::params::hostgroup_erb includefact::config includefact::facter } #创建目录以及文件 [root@puppetmaster162modules]#catfact/manifests/config.pp classfact::config{ file{'/etc/facter': ensure=>directory, owner=>'root', group=>'root', mode=>'0644', } file{'/etc/facter/facts.d': ensure=>directory, owner=>'root', group=>'root', mode=>'0644', require=>File['/etc/facter'] } file{"/etc/facter/facts.d/$hostname.txt": owner=>"root", group=>"root", mode=>0400, content=>template($fact::hostgroup_erb), require=>File['/etc/facter/facts.d'], } } #定义变量 [root@puppetmaster162modules]#catfact/manifests/params.pp classfact::params{ $hostgroup_erb='fact/hostgroup.erb' } #定义fact模板(原因可参考http://kisspuppet.com/2013/11/10/mcollective-middleware/) [root@puppetmaster162manifests]#catfact.pp classfact::facter{ file{"/etc/mcollective/facts.yaml": owner=>root, group=>root, mode=>0440, loglevel=>debug,#reducenoiseinPuppetreports content=>inline_template('<%=scope.to_hash.reject{|k,v|k.to_s=~/(uptime.*|path|timestamp|free|.*password.*|.*psk.*|.*key)/}.to_yaml%>'), } } #设置文件模板 [root@puppetmaster162modules]#catfact/templates/hostgroup.erb hostgroup=<%=@hostgroup%> foreman_env=<%=@foreman_env%> 4、Foreman上管理主机组和模块fact 先导入类,然后在主机组里进行关联即可,由于fact模块是针对所有主机的,建议关联到1级主机组,加入的节点会自动继承。关联完成后的效果如下 Foreman安装 Foreman安装 5、在Foreman上对两个节点执行“puppet run”操作 Foreman安装 6、查看facter信息是否生成 [root@foreman163~]#facterhostgroup prd [root@puppetmaster162~]#facterhostgroup prd/kisspuppet 7、通过mco命令结合fact进行过滤查看 [root@puppetmaster162~]#mcoping-Fhostgroup=prd foreman163.kisspuppet.comtime=98.55ms ----pingstatistics---- 1repliesmax:98.55min:98.55avg:98.55 [root@puppetmaster162~]#mcoping-Fhostgroup=prd/kisspuppet puppetmaster162.kisspuppet.comtime=94.14ms ----pingstatistics---- 1repliesmax:94.14min:94.14avg:94.14 [root@puppetmaster162~]#mcopuppet-vrunonce-Fhostgroup=prd/kisspuppet Discoveringhostsusingthemcmethodfor2second(s)....1 *[============================================================>]1/1 puppetmaster162.kisspuppet.com:OK {:summary=>"StartedaPuppetrunusingthe'puppetagent--test--color=false--splay--splaylimit30'command"} ----rpcstats---- Nodes:1/1 Pass/Fail:1/0 StartTime:ThuDec1815:13:09+08002014 DiscoveryTime:2004.07ms AgentTime:85.19ms TotalTime:2089.26ms 注:以上方式只是提供了一种思路,更多的方式还需要根据具体的实际环境而改变,总之一点,fact很强大,看你怎么用。 本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1591390,如需转载请自行联系原作者