首页 > 代码库 > 【跟我学Puppet】1.5 Puppet 3.7 使用Hiera定义配置

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

1. 环境准备

   OS:CentOS 6.4

   关闭selinux和iptables

   部署Puppet:1.0 Puppet 3.7部署 

   安装Puppet源:http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm 


   完成PuppetMaster/Agent的部署,证书签署...

   Hiera是一个key/value配置数据的查找工具,可以用来方便的配置特殊节点配置数据.



2. 使用Hiera

  a) 安装hiera

    如果安装的是Puppet 3.7不需要再安装Hiera了..

    如果安装的是2.7版本,需要执行下面的命令.

yum install hiera hiera-puppet -y


   b)配置hiera.yaml

    查看配置文件的路径

puppet master --configprint hiera_config    #默认在/etc/puppet/hiera.yaml


    hiera的配置文件必须是YAML hash格式.

#一个参考的配置..,注意每个最顶层的配置,前面必须要有一个 : 
---
:backends:
  - yaml
  - json
:yaml:
  :datadir: /etc/puppet/hieradata
:json:
  :datadir: /etc/puppet/hieradata
:hierarchy:
  - "%{::clientcert}"
  - "%{::custom_location}"
  - common

#如果hiera.yaml存在,但是里面是空的..,那么它的默认配置如下..
---
:backends: yaml
:yaml:
  :datadir: /var/lib/hiera:hierarchy: common
:logger: console


    c) 配置参数

#顶层配置
:hierarchy
  #必须是一个字符串或数组,每一个名字都代表一个静态或动态数据源
  #动态数据是一个简单的 %{variable} 内插变量
  #在层次结构中,按顺序检查,自上而下.
  #默认值是common

:backend
  #必须是一个字符串或数组,每一个名字都代表一个可用的Hiera的backend
  #内置的backend是yaml和json,可以添加额外的backend作为附加的
  #默认值是yaml

#backend设置
:yaml and :json
:datadir   
  #可以在目录中找到数据源的文件,必须是一个字符串
  #可以在路径中使用变量内插/etc/puppet/hieradata/%{::environment}
  #默认值 /var/lib/hiera



#配置hiera.yaml
mkdir /etc/puppet/hieradata/
cat > /etc/puppet/hiera.yaml <<EOF
---
:backends:
  - yaml
:yaml:
  :datadir: /etc/puppet/hieradata
:logger: console
:hierarchy:
  - "%{operatingsystem}%{::operatingsystemmajrelease}"
  - "%{::osfamily}"
  - common
EOF

#创建默认会被匹配的数据文件..,使用classes引入base模块
cat > /etc/puppet/hieradata/common.yaml <<EOF
---
classes:
  - base
EOF

#创建当osfamily被匹配为RedHat时的文件...
cat > /etc/puppet/hieradata/RedHat.yaml <<EOF
---
os: redhat
EOF

#创建当operatingsystem和operatingsystemmajrelease被匹配时的文件..
cat > /etc/puppet/hieradata/CentOS6.yaml <<EOF
---
os: CentOS 
os_type:
  Linux: true 
  unix: false
EOF

#配置site.pp自动导入类模块...
cat > /etc/puppet/manifests/site.pp <<EOF
hiera_include(‘classes‘)
EOF

#创建一个base模块,打印出os变量
#对于查找数据可以使用三种函数
#标准查询hiera 获取一个匹配key的value
#合并查询hiera_array  获取所有匹配的键,然后返回它们的值到一个数组中
#合并查询hiera_hash 类似数组,返回hash的结构.
mkdir /etc/puppet/modules/base/manifests
cat > /etc/puppet/modules/base/manifests/init.pp <<EOF
class base {
  $test1 = hiera(‘os‘)
  $test2 = hiera_array(‘os‘)
  $test3 = hiera_hash(‘os_type‘)
  notify { "OS1: $test1":}
  notify { "OS2: $test2":}
  notify { "OS3: $test3[‘linux‘]   $test3[‘unix‘]":}
}
EOF

#重启Puppet Master



3. 执行Puppet Agent

[root@agent1 ~]# puppet agent --verbose --no-daemonize
Notice: Starting Puppet client version 3.7.3
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.dbsa.cn
Info: Applying configuration version ‘1417636182‘
Notice: OS3: Linuxtrueunixfalse[‘linux‘]   Linuxtrueunixfalse[‘unix‘]
Notice: /Stage[main]/Base/Notify[OS3: Linuxtrueunixfalse[‘linux‘]   Linuxtrueunixfalse[‘unix‘]]/message: defined ‘message‘ as ‘OS3: Linuxtrueunixfalse[‘linux‘]   Linuxtrueunixfalse[‘unix‘]‘
Notice: OS1: CentOS
Notice: /Stage[main]/Base/Notify[OS1: CentOS]/message: defined ‘message‘ as ‘OS1: CentOS‘
Notice: OS2: CentOSredhatdefault
Notice: /Stage[main]/Base/Notify[OS2: CentOSredhatdefault]/message: defined ‘message‘ as ‘OS2: CentOSredhatdefault‘
Notice: Finished catalog run in 0.03 seconds
^CNotice: Caught INT; calling stop
[root@agent1 ~]# facter operatingsystem
CentOS
[root@agent1 ~]# facter operatingsystemmajrelease
6




本文出自 “晓风残月” 博客,请务必保留此出处http://kinda22.blog.51cto.com/2969503/1586495

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