renyanping 发表于 2018-8-3 06:01:30

MCollective结合自定义facter对puppet节点进行分类触发操作

  MCollective结合自定义facter对puppet节点进行分类触发操作
  
  如果需要交流puppet 可加入puppet技术交流QQ群296934942
  实验环境:
  puppetserver.rsyslog.org
  MCollective客户端+ACtiveMQ服务端+Puppet服务端
  agent1.rsyslog.org
  MCollective服务端+Puppet客户端
  应用:apache
  agent2.rsyslog.org
  MCollective服务端+Puppet客户端
  应用:apache+mysql
  agent3.rsyslog.org
  MCollective服务端+Puppet客户端
  应用:php
  实验过程:
  一、定义服务器变量列表
  所有服务器变量列表
  MY_APPLY1=apache
  MY_APPLY2=mysql
  MY_APPLY3=php
  建议添加到所有服务器的/etc/profile文件中,然后source
  主机变量:agent1.rsyslog.org
  vim /etc/profile
  MY_APPLY1=apache
  export MY_APPLY1
  export FACTERLIB=/var/lib/puppet/lib/facter
  # source /etc/profile
  主机变量:agent2.rsyslog.org
  vim /etc/profile
  MY_APPLY1=apache
  MY_APPLY2=mysql
  export MY_APPLY1
  export MY_APPLY2
  export FACTERLIB=/var/lib/puppet/lib/facter
  主机变量:agent3.rsyslog.org
  vim /etc/profile
  MY_APPLY3=php
  export MY_APPLY3
  export FACTERLIB=/var/lib/puppet/lib/facter
  二、自定义facter
  1、创建目录结构
  # mkdir public/{modules,manifests,files,lib/facter}-p
  2、服务器和节点都打开模块中的插件功能
  # vim /etc/puppet/puppet.conf
  
  pluginsync = true
  3、编写自定义fact
  # vim /etc/puppet/modules/public/lib/facter/my_apply1.rb
  # my_apply1.rb
  #
  Facter.add("my_apply1") do
  setcode do
  Facter::Util::Resolution.exec('/bin/echo $MY_APPLY1')
  end
  end
  # vim /etc/puppet/modules/public/lib/facter/my_apply2.rb
  # my_apply2.rb
  #
  Facter.add("my_apply2") do
  setcode do
  Facter::Util::Resolution.exec('/bin/echo $MY_APPLY2')
  end
  end
  # vim /etc/puppet/modules/public/lib/facter/my_apply3.rb
  # my_apply3.rb
  #
  Facter.add("my_apply3") do
  setcode do
  Facter::Util::Resolution.exec('/bin/echo $MY_APPLY3')
  end
  end
  4、本地建立环境变量
  # export FACTERLIB=/etc/puppet/modules/public/lib/facter
  5、测试fact(如果不正常,会显示调试信息)因为本机并未定义,所有没有显示结果
  # facter my_apply1
  # facter my_apply2
  # facter my_apply3
  6、服务器上运行一次puppet程序,只下放自定义的facter
  # mco puppet -v runonce
  7、查看任意节点目录下是否下载了自定义的rb模版
  # ll /var/lib/puppet/lib/facter
  total 20
  -rw-r--r-- 1 root root 125 Aug 26 11:19 backup_date.rb
  -rw-r--r-- 1 root root 194 Aug 26 11:19 my_apply1.rb
  -rw-r--r-- 1 root root 132 Aug 26 11:19 my_apply2.rb
  -rw-r--r-- 1 root root 132 Aug 26 11:19 my_apply3.rb
  8、重启所有节点的mcollective服务(可通过puppet资源实现)
  /etc/rc.d/init.d/mcollective restart
  三、测试自定义节点是否能够被使用
  1、节点端测试
  # facter my_apply1
  apache
  # facter my_apply2
  # facter my_apply3
  # facter my_apply3
  # facter my_apply2
  mysql
  # facter my_apply1
  apache
  # facter my_apply1
  # facter my_apply2
  # facter my_apply3
  php
  2、MCollective客户端测试
  # mco inventory agent1.rsyslog.org| grep my_apply
  my_apply1 => apache
  # mco inventory agent2.rsyslog.org| grep my_apply
  my_apply1 => apache
  my_apply2 => mysql
  # mco inventory agent3.rsyslog.org| grep my_apply
  my_apply3 => php
  3、通过自定义的facter进行过滤运行puppetd服务
  3.1、只运行变量my_apply3='php'的所有节点
  # mco puppet -v runoncemco facts -v --with-factmy_apply3='php'
  Discovering hosts using the mc method for 2 second(s) .... 1
  * [ ============================================================> ] 1 / 1
  agent3.rsyslog.org                     : OK
  {:summary=>      "Started a background Puppet run using the 'puppet agent --onetime --daemonize --color=false --splay --splaylimit 30' command"}
  ---- rpc stats ----
  Nodes: 1 / 1
  Pass / Fail: 1 / 0
  Start Time: Mon Aug 26 11:56:53 +0800 2013
  Discovery Time: 2020.83ms
  Agent Time: 1368.84ms
  Total Time: 3389.67ms
  3.2、只运行变量 my_apply1='apache'和 my_apply2='mysql'的所有节点
  # mco puppet -v runonce   rpc --np -F my_apply1='apache' -F my_apply2='mysql'
  Discovering hosts using the mc method for 2 second(s) .... 1
  agent2.rsyslog.org                     : OK
  {:summary=>      "Started a background Puppet run using the 'puppet agent --onetime --daemonize --color=false --splay --splaylimit 30' command"}
  ---- rpc stats ----
  Nodes: 1 / 1
  Pass / Fail: 1 / 0
  Start Time: Mon Aug 26 11:58:07 +0800 2013
  Discovery Time: 2003.38ms
  Agent Time: 1051.53ms
  Total Time: 3054.91ms
页: [1]
查看完整版本: MCollective结合自定义facter对puppet节点进行分类触发操作