四、Fact插件

4.1 使用pluginsync进行发布

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

4.2 创建模块facts

[root@puppetmaster1 ~]# cd /etc/puppet/environments/jqprd/environment/modules/
[root@puppetmaster1 modules]# tree facts/  #目录结构
facts/
└── lib
    └── facter
        └── hwclock.rb
2 directories, 1 file

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

[root@puppetmaster1 facter]# vim hwclock.rb  #自定义fact:hwclock,显示节点硬件时间
Facter.add(:hwclock) do
  setcode do
    %x{/usr/sbin/hwclock}.chomp
  end
end

4.3 应用自定义fact至motd模块中

[root@puppetmaster1 jqprd]# 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://$puppetmaster1/modules/motd/etc/motd",
    require => Package['setup'],
  }
  notify { " Hardware-Clock: ${::hwclock}": } #添加一个通知,这里只是测试,没有实际意义
}

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

[root@puppetmaster1 jqprd]# vim /etc/puppet/puppet.conf
[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    ssldir = $vardir/ssl
    pluginsync = true 
...

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

[root@puppetmaster jqprd]# 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::puppetmaster1') %>
    certname = <%= scope.lookupvar('puppet::params::certname') %>

节点运行puppet agent进行测试

[root@ag1 ~]# facter -p hwclock  #没有这个fact,自定义fact需要加上-p参数才能显示
[root@ag1 ~]# puppet agent -t --environment=jqprd  #运行一次
[root@ag1 yum.repos.d]# puppet agent -t --environment=jqprd
Info: Retrieving pluginfacts
Info: Retrieving plugin
Notice: /File[/var/lib/puppet/lib/facter/hwclock.rb]/ensure: defined content as '{md5}d8cc9fe2b349a06f087692763c878e28'
Info: Loading facts
Info: Loading facts
Info: Caching catalog for ag1_cert.jq.com
Info: Applying configuration version '1419414521'
[root@ag1 ~]# facter -p  hwclock #自定义的hwclock生效
hwclock => Sun 30 Mar 2014 04.1、创建模块facts
 
[root@puppetmaster ~]# cd /etc/puppet/environments/jqprd/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
应用自定义fact至motd模块中
[root@puppetmaster jqprd]# 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://$puppetmaster1/modules/motd/etc/motd",
    require => Package['setup'],
  }
  notify { " Hardware-Clock: ${::hwclock}": } #添加一个通知,这里只是测试,没有实际意义
}
在puppetmaster端的puppet.conf中添加选项pluginsync
 
[root@puppetmaster jqprd]# vim /etc/puppet/puppet.conf
 
[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    ssldir = $vardir/ssl
    pluginsync = true    #添加插件选项
...
在所有节点puppet.conf中添加pluginsync(通过在puppet模块中添加实现)
 
[root@puppetmaster jqprd]# 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::puppetmaster1') %>
    certname = <%= scope.lookupvar('puppet::params::certname') %>
节点运行puppet agent进行测试
 
[root@ag1 ~]# facter -p hwclock  #没有这个fact,自定义fact需要加上-p参数才能显示
[root@ag1 ~]# puppet agent -t --environment=jqprd  #运行一次
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 ag1_cert.jqpuppet.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@ag1 ~]# facter -p  hwclock #自定义的hwclock生效
hwclock => Sun 30 Mar 2014 05:06:25 PM CST  -0.567090 seconds
 
[root@ag1 ~]# 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@ag1 ~]# puppet --genconfig | grep factpath
    factpath = /var/lib/puppet/lib/facter:/var/lib/puppet/facts5:06:25 PM CST  -0.567090 seconds
[root@ag1 ~]# 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@ag1 ~]# puppet --genconfig | grep factpath
    factpath = /var/lib/puppet/lib/facter:/var/lib/puppet/facts

五、自定义fact结合hirea

在3.7版本中,hirea不需要单独安装,在安装puppet的时候就已经安装。

默认hiera.yaml主配置文件在/etc目录下,为了结合后期版本控制系统集中管理,建议将此文件copy到/etc/puppet目录下,然后创建软连接指向/etc/hiera.yaml即可。

[root@puppetmaster ~]# mv /etc/hiera.yaml /etc/puppet/
[root@puppetmaster ~]# ln -s /etc/puppet/hiera.yaml /etc/hiera.yaml
[root@puppetmaster ~]# ll /etc/hiera.yaml 
lrwxrwxrwx 1 root root 22 Apr 20 20:05 /etc/hiera.yaml -> /etc/puppet/hiera.yaml

5.1 编辑hiera.yaml

  • 添加全局变量common,注释掉defaults、global和clientcert。
  • 添加系统类型变量osfamily
  • 添加主机名变量hostname
  • 添加datadir路径位置,中间用了puppet环境变量,这里的环境变量和puppet应用的环境变量是一致的。如果你只有一种环境,只需要将其中变量去掉即可。

备注: 以上变量其实就是fact变量。

[root@puppetmaster ~]# vim /etc/puppet/hiera.yaml 
---
:backends:
  - yaml
:hierarchy:
#  - defaults
#  - "%{clientcert}"
  - common
  - "%{environment}"
  - "%{osfamily}"
  - "%{hostname}"
#  - global
:yaml:
  :datadir:"/etc/puppet/environments/%{environment}/hiera"

hiera主配置文件编写完成之后,需要重启puppetmaster后方可生效。

[root@puppetmaster hiera]# /etc/init.d/puppetmaster restart
Stopping puppetmaster:                                     [  OK  ]
Starting puppetmaster:                                     [  OK  ]

5.2 Facter自定义变量

创建变量common对应的文件

[root@puppetmaster1 jqprd]# pwd

/etc/puppet/environments/jqprd

[root@puppetmaster1 jqprd]# mkdir hiera

[root@puppetmaster1 hiera]# vim common.yaml

---

puppetmaster1:

- 'puppetmaster1.jq.com'

创建变量osfamily对应的文件

[root@ag1 ~]# facter osfamily
RedHat
[root@puppetmaster hiera]# vim RedHat.yaml 
---
classes:
  - 'puppet'
  - 'yum'

通过hiera命令测试

[root@puppetmaster hiera]# hiera classes environment=jqprd
nil
[root@puppetmaster hiera]# hiera classes environment=jqprd osfamily=RedHat
["motd", "puppet", "yum"]
[root@puppetmaster hiera]# hiera classes environment=jqprd osfamily=SLES
nil

通过以上命令可以得在环境为jqprd,系统为RedHat的情况下,classes的变量为三个值(puppet、yum)。

创建变量hostname对应的所有节点文件

[root@ag1 ~]# facter hostname
ag1
[root@puppetmaster hiera]# vim ag1.yaml 
---
classes:
  - 'motd'
certname:
  - 'ag1_cert.jq.com'
[root@puppetmaster hiera]# vim ag1.yaml 
---
classes:
  - 'motd'
certname:
  - 'ag1_cert.jq.com'
[root@puppetmaster hiera]# vim agent3.yaml 
---
certname:
  - 'agent3_cert.jq.com'

通过hiera命令测试

[root@puppetmaster hiera]# hiera classes environment=jqprd hostname=agent
1
["motd"]
[root@puppetmaster hiera]# hiera classes environment=jqprd hostname=agent
2
["motd"]
[root@puppetmaster hiera]# hiera classes environment=jqprd hostname=agent
3
nil
[root@puppetmaster hiera]# hiera certname environment=jqprd hostname=ag1
["ag1_cert.jq.com"]
[root@puppetmaster hiera]# hiera certname environment=jqprd hostname=ag1
["ag1_cert.jq.com"]
[root@puppetmaster hiera]# hiera certname environment=jqprd hostname=agent3
["agent3_cert.jq.com"]

通过以上命令测试可以得知,系统fact变量hostname为ag1和ag1的情况下,hiera变量classes为motd。certname变量为各自的certname变量。

5.3 应用hiera变量于Puppetmaster

在现有facts模块中直接添加

之前facts模块中的结构

[root@puppetmaster1 facts]# pwd

/etc/puppet/environments/jqprd/environment/modules/facts

[root@puppetmaster1 facts]# mkdir -p {files,manifests,templates}

[root@puppetmaster modules]# tree facts/
facts/
├── files
├── lib
│   └── facter
│       └── hwclock.rb   #通过pluginsync模式发布的自定义fact变量,无需修改
├── manifests
└── templates
5 directories, 1 file

添加管理file资源的pp文件

[root@puppetmaster manifests]# vim config.pp #定义file资源
class facts::config{
  file{ "/etc/facter/facts.d/$hostname.txt":   #文件名称通过变量hostname获取
    owner   => "root",
    group   => "root",
    mode    => 0400,
    source  => "puppet:///modules/facts/facts.d/$hostname.txt",  #文件名称通过节点变量hostname获取
    require => Class['facts::exec'],
  }
}
[root@puppetmaster manifests]# vim exec.pp  #定义可执行资源保证目录 /etc/facter/facts.d 存在
class facts::exec{
  exec {"create fact external":
    command => "mkdir -p /etc/facter/facts.d ",
    path    => ["/usr/bin","/usr/sbin","/bin","/sbin"],
    creates => "/etc/facter/facts.d",
  }
}
[root@puppetmaster manifests]# vim init.pp 
class facts{
    include facts::config,facts::exec
}
[root@puppetmaster manifests]# vim init.pp 
class facts{
    include facts::config,facts::exec
}

创建file资源对应的下载文件

[root@puppetmaster facts.d]# pwd
/etc/puppet/environments/jqprd/environment/modules/facts/files/facts.d
[root@puppetmaster facts.d]# vim ag1.txt 
env=prd
app=weblogic
[root@puppetmaster facts.d]# vim ag1.txt 
env=qa
app=db2
[root@puppetmaster facts.d]# vim agent3.txt 
env=prd
app=nginx

5.4 应用模块facts至hiera中

由于模块facts属于全局的,应用于common.ymal或者RedHat.ymal中即可。

[root@puppetmaster hiera]# vim RedHat.yaml 
---
classes:
  - 'puppet'
  - 'yum'
  - 'facts'

节点测试

[root@ag1 ~]# ll /etc/facter/facts.d
ls: cannot access /etc/facter/facts.d: No such file or directory
[root@agent3 ~]# puppet agent -t --environment=jqprd
[root@agent3 ~]# cat /etc/facter/facts.d/ag1.txt 
env=prd
app=weblogic
[root@ag1 ~]# facter env
prd
[root@ag1 ~]# facter app
weblogic

本系统puppet均根据kisspuppet的博客(http://kisspuppet.com/)进行实验,非常感谢!!!

转载于:https://www.cnblogs.com/krainbow/p/4233022.html

puppet插件fact和hiera(puppet自动化系列3)相关推荐

  1. 【跟我学Puppet】1.5 Puppet 3.7 使用Hiera定义配置

    1. 环境准备 OS:CentOS 6.4 关闭selinux和iptables 部署Puppet:1.0 Puppet 3.7部署 安装Puppet源:http://yum.puppetlabs.c ...

  2. php配合jade使用,前端自动化系列(四)之jade预编译html

    刚开始写这篇文章的时候: 其实我是拒绝的: 因为在 前端自动化系列(二)之less.scss.sass.stylus css预处理器 中: 我已经表明了我的态度: 我是不喜欢那种靠缩进来体现等级层次感 ...

  3. 自动化系列(五)Python实现企业微信机器人

    自动化系列(四)Python实现钉钉机器人 定期数据需求除了以邮件的形式交付外,也可以发送到工作群里通知相关人员及时关注,本文将介绍如何推送数据到钉钉群里并@相关人员及时关注. 添加自定义机器人 创建 ...

  4. Puppet基础篇3-安装Puppet前期的准备工作

    零基础学习Puppet自动化配置管理系列文档 工欲善其事必先利其器 原文地址: http://kisspuppet.com/2014/03/06/puppet_learning_base3/ 在安装P ...

  5. 运维面试必问的自动化系列高频面试题(2021年最新版)

    前言 本系列是我要进大厂运维面试高频系列的第六篇文章 这些年互联网老辛一直在面试一线,帮助小伙伴辅导面试准备及面试复盘,拿到过大大小小的offer,比如阿里,字节,美团,快手,百度等等 每次面试后我都 ...

  6. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播之EasyNVR流媒体服务器系列产品直播延时问题解析

    背景分析 从视频智能化相关技术研发开始计算,智能化在视频行业内已经发展了十余年,但是视频行业的智能化应用一直没有达到预期.目前视频智能化主要的表现还是集中在前端设备摄像机产品的某些智能功能,以及一些配 ...

  7. CorelDRAWX4的C++插件开发(四十)纯C++插件开发(4)继承插件结构体IVGAppPlugin和自动化接口IDispatch

    因为在注册插件的时候,是要传一个名为IDispatch*这样子的一个参数,所以我们可以看到插件在注册的时候默认就是要求这是一个实现了自动化的接口(IDispatch,如下图所示,是后面将要展示的代码, ...

  8. YESLAB老余——网络自动化系列(2)

    YESLAB网络自动化 "中国高校计算机大赛-网络技术挑战赛"(2019年) "中国高校计算机大赛"(China Collegiate Computing Co ...

  9. 【金阳光测试】大话Android自动化测试--Android自动化系列(1)--金阳光于2013年4月份

    Android自动化测试框架和工具在四年多的发展日趋成熟.从五年前的第一代自动化架构演进到目前第四代(本系列讲座第7篇后将详细剖析第三代和第四代自动化框架)从以前最早谷歌推崇的monkey随机测试工具 ...

最新文章

  1. BrupSuite渗透测试笔记(十一)
  2. 【基础巩固篇】Java 8中对CAS的优化
  3. 利用SSH 反向代理 ,实现跨局域网连接家里的linux 主机 (树莓派)
  4. SCARA四轴机器人丝杆花键_花键丝杆一体轴型SCARA机器人的制作方法
  5. 9款超绚丽的HTML5/CSS3应用和动画特效
  6. 华为的型号命名规则_华为Mate 40 Pro+ 外观曝光 正面双挖孔 背部奥利奥
  7. [渝粤教育] 西南科技大学 电子设计EDA 在线考试复习资料
  8. 特殊符号的写法 (HTML 4.01 符号实体)
  9. 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
  10. 2017.10.24 上升序列 思考记录
  11. Python Appium 元素定位方法简单介绍
  12. python定时模块:apscheduler
  13. [Java] java打飞机小游戏
  14. 博科BROCADE交换机开启snmp服务
  15. python 面板数据分析_stata面板数据模型分析的详细步骤和命令
  16. 33岁学做软件测试还来得及? 4个建议送给你!
  17. 什么是软件测试?简介,基础知识和重要性
  18. 机器学习怎么学?机器学习流程
  19. 如何给玩偶建模并让它跳个舞?
  20. Artifact在计算机视觉、图像处理领域的意思理解

热门文章

  1. 视频加密方法自己做的一些调研
  2. VS 2010 测试功能学习(七) - RnP与Coded UI自动化测试
  3. 2020Java后端开发面试题总结(春招+秋招+社招)
  4. Go语言核心之美 2.6-常量
  5. cf-#501 div3 C. Songs Compression
  6. 计算机一级幻灯片版式,ppt2010官方基础教程:添加不同版式幻灯片-powerpoint技巧-电脑技巧收藏家...
  7. PS 羽化工具使用
  8. 雷电模拟器修改系统语言
  9. 驱动仿真物品移动乌龟\Gazebo\cmd_vel和/gazebo/set_model_state
  10. CG-62 压电式雨量传感器 什么是压电式雨量传感器,压电雨量传感器和翻斗式雨量传感器优势对比