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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

实验环境:

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
[root@agent1 ~]# 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、创建目录结构
[root@puppetserver modules]# mkdir public/{modules,manifests,files,lib/facter}  -p

2、服务器和节点都打开模块中的插件功能
[root@puppetserver public]# vim /etc/puppet/puppet.conf
[main]
   pluginsync = true
3、编写自定义fact
[root@puppetserver public]# 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
[root@puppetserver public]# 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
[root@puppetserver public]# 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、本地建立环境变量
[root@puppetserver public]# export FACTERLIB=/etc/puppet/modules/public/lib/facter

5、测试fact(如果不正常,会显示调试信息)因为本机并未定义,所有没有显示结果
[root@puppetserver facter]# facter my_apply1
[root@puppetserver facter]# facter my_apply2
[root@puppetserver facter]# facter my_apply3

6、服务器上运行一次puppet程序,只下放自定义的facter
[root@puppetserver facter]# mco puppet -v runonce

7、查看任意节点目录下是否下载了自定义的rb模版
[root@agent2 ~]# 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、节点端测试
[root@agent1 ~]# facter my_apply1
apache
[root@agent1 ~]# facter my_apply2
[root@agent1 ~]# facter my_apply3

[root@agent2 ~]# facter my_apply3
[root@agent2 ~]# facter my_apply2
mysql
[root@agent2 ~]# facter my_apply1
apache

[root@agent3 ~]# facter my_apply1
[root@agent3 ~]# facter my_apply2
[root@agent3 ~]# facter my_apply3
php

2、MCollective客户端测试
[root@puppetserver facter]# mco inventory agent1.rsyslog.org  | grep my_apply
     my_apply1 => apache
[root@puppetserver facter]# mco inventory agent2.rsyslog.org  | grep my_apply
     my_apply1 => apache
     my_apply2 => mysql
[root@puppetserver facter]# mco inventory agent3.rsyslog.org  | grep my_apply
     my_apply3 => php

3、通过自定义的facter进行过滤运行puppetd服务
3.1、只运行变量my_apply3='php'的所有节点     
[root@puppetserver facter]# mco puppet -v runonce  mco facts -v --with-fact  my_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'的所有节点
[root@puppetserver facter]# 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



本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1282725,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Perl Shell 网络协议
puppet连载23:使用ENC节点
Puppet 有两种将节点信息存储在外部的方法: 1.使用外部节点分类器 (ENC) 2.使用LDAP服务器分类 主要学习使用ENC(外部节点分类器)。ENC是一种提供Puppet 查询节点数据的基于脚本(SHELL、RUBY、PERL等)集成系统,这个脚本返回类、继承、变量和环境设置,Puppet可用来定义一个节点和配置主机。
1074 0
|
应用服务中间件 nginx Ruby
|
应用服务中间件 Apache nginx
|
安全 Linux 网络协议
puppet yum模块、配置仓储、mount模块
转载:http://blog.51cto.com/ywzhou/1577335 作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。 1、服务端配置yum模块 (1)模块清单 [root@puppet ~]# tree /etc/puppe...
1070 0