IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

puppet extlookup 和puppet hiera使用

MySQLOPS 数据库与运维自动化技术分享 2012-03-19 23:40:06 累计浏览 3,143 次
本机暂存

    [导读]

    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

更多功能可以参阅:http://puppetlabs.com/blog/first-look-installing-and-using-hiera/

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. 使用Apache 和Passenger来运行puppetmaster (累计阅读 8,319)
  2. 自动化运维之企业实际案例分析 (累计阅读 4,726)
  3. puppet使用rsync来同步文件教程 (累计阅读 4,214)
  4. DevOps之Puppet (累计阅读 3,974)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (累计阅读 3,852)
  6. puppet vagrant 管理VirtualBox 虚拟机 (累计阅读 3,568)
  7. puppet运维之使用自定义函数 (累计阅读 3,406)
  8. linux下源码包制作成rpm包教程 (累计阅读 3,396)
  9. 系统自动化配置和管理工具 SaltStack (累计阅读 3,014)
  10. puppetmaster集群解决方案之puppet客户端共享一张证书 (累计阅读 2,883)