四、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/)进行实验,非常感谢!!!

puppet插件fact和hiera(puppet自动化系列3)的更多相关文章

  1. puppet初始化安装和配置(puppet自动化系列1)

    一.服务器规划 以下均直接yum安装最新版. 服务器操作系统为centos6.2 Puppetmaster1 10.168.32.116 puppstmaster1.jq.com Puppetmast ...

  2. robotframework自动化系列:随机下拉框

    robotframework自动化系列:随机下拉框 随着项目自动化不断推进,在下拉框定位的时候出现些问题,每次下拉框选择都是相同的下拉选项,如果想每次选择的选项不一样,该如何实现呢,查找了很多资料,没 ...

  3. 运维与自动化系列④自动化部署基础与git

    运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...

  4. puppet的使用:安装puppet

    最近项目要使用puppet,趁机赶紧学习下. 在家里的机器中搭建puppet环境,使用两台ubuntu 14.04: 准备工作 时间同步 两台设备先进行时间同步,我把要安装master的机器作为NTP ...

  5. puppet多环境配置(puppet自动化系列2)

    三.Puppet多环境部署 我们为puppetmaster建立3个环境,它们分别是开发环境(jqdev).测试环境(jqtest).生产环境(jqprd). 3.1 配置puppet.conf 在标签 ...

  6. Puppet master nginx 扩展提升性能(puppet自动化系列4)

    puppet使用SSL(https)协议来进行通讯,默认情况下,puppet server端使用基于Ruby的WEBRick HTTP服务器.由于WEBRick HTTP服务器在处理agent端的性能 ...

  7. jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章

    这些天将原来在网上找的jQuery插件进行了下整理,特此将代码分享出来给大家. 见下图结构. 对目录结构进行了分类.这里是插件列表. 这里总共收集了20来个插件.还有下面未进行划分的. 下面是DEMO ...

  8. RobotFrameWork自动化系列:安装配置

    1.   RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...

  9. SharePoint自动化系列——Site/Web/List级别的导航菜单

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 需求:在不同的测试用例中,对脚本中不确定的因素需要和用户交互来确定,比如选择哪个site,选择哪个 ...

随机推荐

  1. recognition rate generalization识别率 泛化

    http://www1.inf.tu-dresden.de/~ds24/lehre/ml_ws_2013/ml_11_hinge.pdf Two extremes: • Big

  2. goland中引用包

    首先在工程目录下新建三个目录:bin, pkg,src Bin文件夹是放置编译后的exe文件 Pkg文件夹是放置包生成后的.a文件 Src文件夹是放置包文件的地方 工程组织目录如下,在src中有tes ...

  3. $.ajax()方法详解(转)

    转: http://www.cnblogs.com/tylerdonet/p/3520862.html 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: ...

  4. docker swarm部署spring cloud服务

    一.准备docker swarm的集群环境 ip 是否主节点   192.168.91.13 是   192.168.91.43 否   二.准备微服务 ①eureka服务 application.y ...

  5. 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

    系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...

  6. GUI菜单——菜单条、菜单、子条目之间关系

    菜单:注意区分三个概念:菜单条.菜单.菜单项 将菜单条添加到窗体,菜单条下面包括菜单,菜单下面可以使菜单或者菜单项 菜单项是最后一个.菜单后面有三角标示. 菜单条[文件] 子菜单--子条目 子条目 示 ...

  7. java项目常用架构

    三层架构 : 界面层/表现层 UI 业务逻辑层 BLL 针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理. 数据访问层 DAL 访问数据库 mvc : 而 MVC 是在三层架构的基 ...

  8. Cisco IOS版本命名规则

    首先说说IOS的运行平台,c2500.c2600.c4500.c2950代表运行此IOS的硬件平台,例如:C2500指2500系列路由器. 其次,看看IOS的版本,IOS有主版本号:11.0.11.1 ...

  9. Spring中如何动态注入Bean实例教程

    前言 在Spring中提供了非常多的方式注入实例,但是由于在初始化顺序的不同,基于标注的注入方式,容易出现未被正确注入成功的情况. 本文将介绍一种在实际项目中基于动态的方式来提取Spring管理的Be ...

  10. java入门了解10

    1.IO: 1.File (一)注意: a.可以表示文件或者文件夹(也可称为目录) b.创建的File对象实际上不存在的文件只是代表了一个抽象路径 c.Windows中分隔符'\'('//'也可以); ...