puppet extlookup 和puppet hiera使用
[導(dǎo)讀]
sky在工作中,遇到這樣的一個(gè)問題,公司有些C++服務(wù)器需要在配置文件里填寫下數(shù)據(jù)庫相關(guān)的信息.
每次部署的時(shí)候,填寫覺得挺麻煩,又浪費(fèi)時(shí)間,另外還容易出錯(cuò).本打算是讓DBA 把相關(guān)信息寫進(jìn)數(shù)據(jù)
庫,通過shell腳本來取得相應(yīng)的變量值.不想折騰,想想puppet是可以讀取csv文件的.另外又想了想還
有沒有其它方法來實(shí)現(xiàn)呢?這時(shí)候看過了puppet hiera可以滿足需求.如是就寫了個(gè)類來測(cè)試. 測(cè)試
共分為兩節(jié),一是使用extlookup來實(shí)現(xiàn),二是使用hiera來實(shí)現(xiàn)
[正文]
一.使用extlookup來讀取csv文件
1.使用csv文件,需要使用extlookup.puppet 2.6的某此版本不支持extlookup.請(qǐng)升級(jí)puppet.
centos下面如何升級(jí)puppet server,請(qǐng)參閱centos 下升級(jí)puppet指南 :
2. 寫了個(gè)類來調(diào)用extlookup 讀取csv文件內(nèi)容:
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"), } } 注:上面的類會(huì)讀取/etc/puppet/modules/extdata/test.csv里的內(nèi)容,然后使用puppet 模板 來生成新配置文件,上面的類是用來測(cè)試,實(shí)際使用需要添加相應(yīng)的服務(wù)啟動(dòng)等,以及服務(wù)與配置相關(guān)關(guān)聯(lián). 3.我們來看下test.csv內(nèi)的文件內(nèi)容:
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.我們來看下模板內(nèi)容: 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.我們可以在客戶端運(yùn)行puppet 來測(cè)試. #puppet agent --test OK的沒有問題.我們接下來使用puppet 的hiera來實(shí)現(xiàn)上述功能.如不容易hiera,請(qǐng)參閱 https://github.com/ripienaar/hiera 里面有詳細(xì)說明: a.查看下當(dāng)前gem 源.如沒有,請(qǐng)?zhí)砑觮aobao的鏡像源.
gem source --list *** CURRENT SOURCES *** http://ruby.taobao.org/ b.我們使用gem來安裝hiera
gem install hiera hiera-puppet c.我們來配置hiera.使用puppet hiera,以及測(cè)試puppet 下的hiera.
mkdir /etc/puppet/hieradata ##創(chuàng)建目錄,用于存放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即可.類內(nèi)容可以抄上面的,這里省略 cat /etc/puppet/hiera.yaml --- :backends: - yaml :logger: console :hierarchy: - %{env}/%{calling_module} - common :yaml: :datadir: /etc/puppet/hieradata 我們可以先測(cè)試下,是否寫得正確.是否能讀取上面的定義的四個(gè)變量. hiera -c /etc/puppet/hiera.yaml db_host env=dev calling_module=server ##來測(cè)試是否來讀到數(shù)據(jù).
能正確的讀到變量,那么在客戶端可以puppet agent --test 即可. [總結(jié)] puppet 的hiera 是對(duì)extlookup的一個(gè)增強(qiáng)吧,同事看了我寫這么多,說你不于直接寫個(gè)shell, 也不至于這么麻煩,至于么,這里不想多說.每個(gè)人都有每個(gè)人的做法.這里再說下,可以使用extlookup2hiera 命令能將csv文件格式轉(zhuǎn)化為json格式的.例如:
extlookup2hiera --in sky.csv --out sky.json --json
【編輯推薦】