1、使用环境变量‘FACTERLIB’创建fact

1.1、在自定义目录里面定义一个fact,列出当前系统登录的用户数

[root@agent1 ~]# vim /var/lib/puppet/kiss_fact/users.rb

Facter.add(:users) do
setcode do
%x{/usr/bin/who |wc -l}.chomp
end
end

[root@agent1 kiss_fact]# facter users #无显示结果,需要设置FACTERLIB

[root@agent1 kiss_fact]#

1.2、将自定义fact路径赋值给变量FACTERLIB

[root@agent1 kiss_fact]# export FACTERLIB=/var/lib/puppet/kiss_fact

[root@agent1 kiss_fact]# facter users

2

[root@agent1 kiss_fact]# facter | grep users

users => 2

备注:这种方法是对第一种方法的扩展,可以自己定义目录,不过需要将路径加到变量FACTERLIB中,可以在/etc/profile添加,这样系统启动的时候便可以自动加载。

2、使用pluginsync进行发布

这种方法比较特殊,节点factpath目录里除了编写好的rb文件之外,还需要在puppet模块中引用,运行一次之后才会转换成fact。通常在puppetmaster端模块里的lib库中添加,然后在puppet.conf中添加选项pluginsync=true即可,格式为ruby文件。

2.1、创建模块facts

[root@puppetmaster ~]# cd /etc/puppet/environments/kissprd/environment/modules/

[root@puppetmaster modules]# tree facts/ #目录结构

facts/
└── lib
└── facter
└── hwclock.rb

2 directories, 1 file

备注:也可以放在其他已经编写好的模块中

[root@puppetmaster facter]# vim hwclock.rb #自定义

fact:hwclock,显示节点硬件时间

Facter.add(:hwclock) do
setcode do
%x{/usr/sbin/hwclock}.chomp
end
end

2.2、应用自定义fact至motd模块中

[root@puppetmaster kissprd]# vim application/modules/motd/manifests/init.pp

class motd{
package{ 'setup':
ensure => present,
}
file{ '/etc/motd':
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
source => "puppet://$puppetserver/modules/motd/etc/motd",
require => Package['setup'],
}
notify { " Hardware-Clock: ${::hwclock}": } #添加一个通知,这里只是测试,没有实际意义
}

2.3、在puppetmaster端的puppet.conf中添加选项pluginsync

[root@puppetmaster kissprd]# vim /etc/puppet/puppet.conf

[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
pluginsync = true #添加插件选项
...

2.4、在所有节点puppet.conf中添加pluginsync(通过在puppet模块中添加实现)

[root@puppetmaster kissprd]# vim environment/modules/puppet/templates/puppet.conf.erb

### config by  puppet ###
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
pluginsync = true #添加插件选项
[agent]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
server = <%= scope.lookupvar('puppet::params::puppetserver') %>
certname = <%= scope.lookupvar ('puppet::params::certname') %>

2.5、节点运行puppet agent进行测试

[root@agent1 ~]# facter -p hwclock #没有这个fact,自定义fact需要加上-p参数才能显示

[root@agent1 ~]# puppet agent -t --environment=kissprd #运行一次

info: Retrieving plugin
notice: /File[/var/lib/puppet/lib/facter/historys.rb]/ensure: removed
notice: /File[/var/lib/puppet/lib/facter/hwclock.rb]/ensure: defined content as '{md5}d8cc9fe2b349a06f087692763c878e28'
info: Loading downloaded plugin /var/lib/puppet/lib/facter/hwclock.rb #下载插件至节点factpath指定的目录
info: Loading facts in /var/lib/puppet/lib/facter/hwclock.rb
info: Caching catalog for agent1_cert.kisspuppet.com
info: Applying configuration version '1396170375'
notice: Hardware-Clock: Sun 30 Mar 2014 05:06:16 PM CST -0.055086 seconds
notice: /Stage[main]/Motd/Notify[ Hardware-Clock: Sun 30 Mar 2014 05:06:16 PM CST -0.055086 seconds]/ message: defined 'message' as ' Hardware-Clock: Sun 30 Mar 2014 05:06:16 PM CST -0.055086 seconds' #应用
notice: Finished catalog run in 0.51 seconds

[root@agent1 ~]# facter -p hwclock #自定义的hwclock生效

hwclock => Sun 30 Mar 2014 05:06:25 PM CST  -0.567090 seconds

[root@agent1 ~]# ll /var/lib/puppet/lib/facter/ #插件已经下载到本地

total 4
-rw-r--r-- 1 root root 79 Mar 30 17:06 hwclock.rb

关于factpath默认路径可通过以下命令查看,当然也可以在puppet.conf中进行修改

[root@agent1 ~]# puppet --genconfig | grep factpath

factpath = /var/lib/puppet/lib/facter:/var/lib/puppet/facts

转载自:https://kisspuppet.gitbooks.io/puppet/content/puppet_learning_base10.html

puppet之自定义fact(转载)的更多相关文章

  1. SQL Server自定义函数( 转载于51CTO )

    用户自定义函数自定义函数不能执行一系列改变数据库状态的操作,可以像系统函数在查询或存储过程等的程序中使用,也可以像相信过程一样能过 execute 命令来执行.自定义函数中存储了一个 Transact ...

  2. iOS多线程编程之自定义NSOperation(转载)

    一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // ...

  3. iOS-UICollectionView自定义布局

    UICollectionView自定义布局 转载: http://answerhuang.duapp.com/index.php/2013/11/20/custom_collection_view_l ...

  4. 【VUE】自定义组件

    [VUE]自定义组件 转载: ============================================ ======================================== ...

  5. 【Feign】自定义配置

    [Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...

  6. 【hibernate】自定义转换器

    [hibernate]自定义转换器 转载:https://www.cnblogs.com/yangchongxing/p/10398255.html 1.转换基本属性 package cn.ycx.s ...

  7. PHP之道 - php各方面的知识汇总

    看到一个PHP的知识各方面的汇总,写的很有借鉴意义,搬过来了 转自: https://laravel-china.github.io/php-the-right-way/ 欢迎阅读 其他语言版本 参与 ...

  8. 【cocos2d-js官方文档】事件分发监听机制(摘录)

    简介 游戏开发中一个很重要的功能就是交互,如果没有与用户的交互,那么游戏将变成动画,而处理用户交互就需要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件处理逻 ...

  9. Android开发--List与ArrayList区别

    List是一个接口,而ArrayList是一个类.  ArrayList继承并实现了List.  所以List不能被构造,但可以向上面那样为List创建一个引用,而ArrayList就可以被构造.  ...

随机推荐

  1. 消息中间件NetMQ结合Protobuf简介

    概述 对于稍微熟悉这两个优秀的项目来说,每个内容单独介绍都不为过,本文只是简介并探讨如何将两部分内容合并起来,使其在某些场景下更适合.更高效. NetMQ:ZeroMQ的.Net版本,ZeroMQ简单 ...

  2. Bootstrap3.0学习第十八轮(JavaScript插件——下拉菜单)

    详情请查看 http://aehyok.com/Blog/Detail/25.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:h ...

  3. HOW TO REMOTELY DEBUG APPLICATION RUNNING ON TOMCAT FROM WITHIN INTELLIJ IDEA

    This post would look into how to tackle and debug issues in scenarios where they only occur in produ ...

  4. 使用github托管代码心

    这次使用github托管代码并没有下载客户端git for windows,而是使用eclipse里面自带的git上传了hello world这个项目,步骤如下: 1.首先创建项目:file-> ...

  5. css学习归纳总结

    来源于:trigkit4 css学习归纳总结(一) 选择器的分组 CSS选择器分为 1.群组选择器 如:p, body, img, div{} 2.兄弟选择器 如:p + p { color:#f00 ...

  6. Centos下apache启动时httpd: apr_sockaddr_info_get() failed for 报错

    今天安装Apache httpd web服务器时,从官方网站上http://www.apache.org/dyn/closer.cgi下载httpd,然后在centos下解压,安装过程分为三部分: ( ...

  7. myeclipse6.0 序列号生成器源码

    import java.io.*; public class Test{ private static final String LL = "Decompiling this copyrig ...

  8. sort关于去除重复/查找非重复/查找重复/统计

    去除重复sort file |uniq   查找非重复 sort file | uniq -u   查找重复 sort file | uniq -d   统计 sort file | uniq -c

  9. Query对象与DOM对象之间的转换方法

    转自http://www.jquerycn.cn/a_4561 刚开始学习jQuery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象.至于DOM对象不多解释,我们接触的太多了,下面重点介 ...

  10. mvc:resources

    springmvc 配置静态文件 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mv ...