IT技术博客大学习 共学习 共进步

puppet extlookup 和puppet hiera使用

MySQLOPS 数据库与运维自动化技术分享 2012-03-19 23:40:06 浏览 3,043 次

    [导读]

    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. 使用Apache 和Passenger来运行puppetmaster (阅读 8,164)
  2. 自动化运维之企业实际案例分析 (阅读 4,622)
  3. puppet使用rsync来同步文件教程 (阅读 4,081)
  4. DevOps之Puppet (阅读 3,822)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,762)
  6. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,442)
  7. puppet运维之使用自定义函数 (阅读 3,301)
  8. puppetmaster集群解决方案之puppet客户端共享一张证书 (阅读 2,781)
  9. puppet手册之建立软件安装源 (阅读 2,563)
  10. puppet 手册检查puppet配置文件和使用puppet tags (阅读 2,482)