puppet extlookup 和puppet hiera使用

运维 系统运维
sky在工作中,遇到这样的一个问题,公司有些C++服务器需要在配置文件里填写下数据库相关的信息. 每次部署的时候,填写觉得挺麻烦,又浪费时间,另外还容易出错.本打算是让DBA 把相关信息写进数据 库,通过shell脚本来取得相应的变量值.不想折腾,想想puppet是可以读取csv文件的.另外又想了想还 有没有其它方法来实现呢?这时候看过了puppet hiera可以满足需求.如是就写了个类来测试. 测试 共分为两节,一是使用extlookup来实现,二是使用hiera来实现

 [导读]

    sky在工作中,遇到这样的一个问题,公司有些C++服务器需要在配置文件里填写下数据库相关的信息.

    每次部署的时候,填写觉得挺麻烦,又浪费时间,另外还容易出错.本打算是让DBA 把相关信息写进数据

    库,通过shell脚本来取得相应的变量值.不想折腾,想想puppet是可以读取csv文件的.另外又想了想还

    有没有其它方法来实现呢?这时候看过了puppet hiera可以满足需求.如是就写了个类来测试. 测试

    共分为两节,一是使用extlookup来实现,二是使用hiera来实现

    [正文]

    一.使用extlookup来读取csv文件

    1.使用csv文件,需要使用extlookup.puppet 2.6的某此版本不支持extlookup.请升级puppet.

    centos下面如何升级puppet server,请参阅centos 下升级puppet指南 :

    2. 写了个类来调用extlookup 读取csv文件内容:

class  server::test {
$extlookup_datadir = "/etc/puppet/modules/extdata/"
$extlookup_precedence = [ "%{name}", "test" ]
$A_db_host = extlookup("A_HOST")
$A_db_port = extlookup("A_PORT")
$A_db_usr  = extlookup("A_USER")
$A_db_pwd  = extlookup("A_PASSWD")
$A_db_name = extlookup("A_DB_NAME")

   file { 'config_file':
          path => "/tmp/server.conf,
          content => template("server/server.conf.erb"),
       }
}

注:上面的类会读取/etc/puppet/modules/extdata/test.csv里的内容,然后使用puppet 模板
来生成新配置文件,上面的类是用来测试,实际使用需要添加相应的服务启动等,以及服务与配置相关关联.

3.我们来看下test.csv内的文件内容:
 extdata/test.csv
####test1###
A_HOST,10.10.1.X
A_PORT,3306
A_USER,xxx
A_PASSWD,xxxxxx
A_DB_NAME,xxxx
###test2###
T_HOST,10.10.1.X
T_PORT,3306
T_USER,xxx
T_PASSWD,xxxxxx
T_DB_NAME,xxxxxx
4.我们来看下模板内容:

cat server/templates/server.conf.erb
A_db_host:<%= A_db_host %>
A_db_port:<%= A_db_port %>
A_db_usr:<%= A_db_usr %>
A_db_pwd:<%= A_db_pwd %>
A_db_name:<%= A_db_name %>

T_db_host:<%= T_db_host %>
T_db_port:<%= T_db_port %>
T_db_usr:<%= T_db_usr %>
T_db_pwd:<%= T_db_pwd %>
T_db_name:<%= T_db_name %>

5.我们可以在客户端运行puppet 来测试.

#puppet agent --test 

OK的没有问题.我们接下来使用puppet 的hiera来实现上述功能.如不容易hiera,请参阅
 https://github.com/ripienaar/hiera 里面有详细说明:

a.查看下当前gem 源.如没有,请添加taobao的镜像源.
gem source --list
*** CURRENT SOURCES ***

http://ruby.taobao.org/

b.我们使用gem来安装hiera
gem install hiera hiera-puppet

c.我们来配置hiera.使用puppet hiera,以及测试puppet 下的hiera.
 mkdir /etc/puppet/hieradata ##创建目录,用于存放xx.yaml文件

cat /etc/puppet/hieradata/dev.yaml ##编写yaml文件

---
db_host: 10.10.1.xx
db_port: 3306
db_pwd: xxxx
db_name: xxx

class server::test ( $db_host = hiera("db_host"), $db_port = hiera("db_port") ...) {
...
}  

## 上面没有写全,同样加上db_pwd,db_name即可.类内容可以抄上面的,这里省略

cat /etc/puppet/hiera.yaml
---
:backends: - yaml
:logger: console
:hierarchy: - %{env}/%{calling_module}
            - common
:yaml:
   :datadir: /etc/puppet/hieradata

我们可以先测试下,是否写得正确.是否能读取上面的定义的四个变量.
hiera -c /etc/puppet/hiera.yaml db_host env=dev calling_module=server ##来测试是否来读到数据.
能正确的读到变量,那么在客户端可以puppet agent --test 即可.

[总结]

puppet 的hiera 是对extlookup的一个增强吧,同事看了我写这么多,说你不于直接写个shell,
也不至于这么麻烦,至于么,这里不想多说.每个人都有每个人的做法.这里再说下,可以使用extlookup2hiera
命令能将csv文件格式转化为json格式的.例如:
extlookup2hiera --in sky.csv --out sky.json  --json

【编辑推荐】

  1. Clojure世界:如何做性能测试
  2. Windows安全最高境界
  3. IE8安全新功能实测,到底给不给力?
责任编辑:赵宁宁
相关推荐

2012-09-04 14:52:28

Puppet

2011-06-07 15:51:24

puppet

2012-05-05 21:43:27

puppet自动化运维

2012-05-04 19:45:30

puppet自动化运维

2011-01-28 09:20:02

CentOSpuppetforeman

2022-05-03 10:55:24

DevOpsChefPuppet

2012-05-17 11:19:05

OpenStackPuppet Labs

2014-09-26 10:28:39

LinuxPuppet

2012-09-17 16:41:04

CentOS5Puppet

2015-12-28 17:10:55

PuppetKubernetes容器

2012-05-15 09:31:57

puppet vagrVirtualBox

2011-03-02 09:36:35

Puppet 2.6.

2015-12-07 15:11:18

Ubuntupuppet安装

2012-05-03 17:00:28

虚拟化云计算OpenStack

2012-05-03 10:46:21

OpenStackPuppet Labs云计算

2014-08-15 10:58:22

puppet3Nginx运维

2019-04-17 07:59:09

Puppet自动化集群管理

2011-06-07 15:12:41

Puppet语法

2011-11-30 13:27:19

Puppet

2013-04-16 14:55:21

自动化运维Puppet实战
点赞
收藏

51CTO技术栈公众号