關(guān)于oslo.config模塊的使用

該文章不作發(fā)表使用,之后會整理發(fā)出党涕,文章內(nèi)容現(xiàn)在還是原作者的筆記烦感,請查看原作者文章

這個模塊就是為了達到這樣的目的:在一個模塊中定義一些配置,可以在其他模塊中根據(jù)自己需要使用的配置膛堤,有針對性的進行調(diào)用

參考鏈接:http://blog.csdn.net/u012450329/article/details/53012238

配置文件:用來配置OpenStack各個服務(wù)的ini風(fēng)格的配置文件手趣,通常以.conf結(jié)尾;

配置項(options):配置文件或命令行中給出的配置信息的左值肥荔, 如:enabled_apis = ec2, osapi_keystone, osapi_compute中的“enabled_apis”绿渣;

配置項的值:? 配置文件或命令行中給出的配置信息的右值,如:enabled_apis = ec2, osapi_keystone, osapi_compute中的“ec2, osapi_keystone, osapi_compute”燕耿;

配置組(option groups):一組配置項中符,在配置文件中通過[...]來表示,如my.conf文件中的[rabbit]字段表示接下來開始一個名為rabbit的配置組誉帅;

其他模塊:運行時需要根據(jù)配置項的值實現(xiàn)具體操作的模塊淀散;

配置項的模式(option schemas):在解析配置文件、獲取配置項的值之前蚜锨,其他模塊聲明自己需要的配置項档插。配置文件通常是針對一個完整的服務(wù)的,因此其他模塊中可能用不到配置文件中的所有配置項亚再,這樣就必須告訴系統(tǒng)自己依賴于哪些配置項郭膛,這個過程就是設(shè)置配置項的模式。包括聲明配置項在配置文件的名稱针余、設(shè)置配置項的默認值(一旦配置文件中沒有該配置項而其他模塊又依賴于該配置項饲鄙,就使用這里聲明的默認值)等等;

引用(reference):其他模塊解析配置文件圆雁,獲取配置項的值后,就可以在下面的實現(xiàn)中使用這些具體的配置值了帆谍;

注冊(register):其他模塊在引用配置項的值之前伪朽,必須注冊自己將要引用的那些配置項的模式。也就是說汛蝙,配置文件中的配置項其他模塊不一定都為其聲明模式烈涮,聲明了模式的配置項也不一定為其進行注冊朴肺,當(dāng)然如果不注冊,即使聲明了模式坚洽,也無法引用戈稿。

下面先給一個high-level的過程說明一下如何使用這個庫,OpenStack中配置文件的解析主要有以下幾個步驟:

step1. 正確配置各個服務(wù)主配置文件(*.conf文件)讶舰,本步驟在各個服務(wù)(如:keystone)中完成鞍盗。

step2. 在要使用到配置信息的模塊中聲明將用到的那些配置項的模式,包括配置項的名稱跳昼、數(shù)據(jù)類型般甲、默認值和說明等;

step3. 創(chuàng)建一個對象鹅颊,創(chuàng)建該對象的類充當(dāng)配置管理器敷存,這個對象作為容器以后將存儲配置項的值。

step4. 調(diào)用step3創(chuàng)建的對象中相應(yīng)的注冊方法(如:register_opt())堪伍,注冊step2中聲明的配置項模式锚烦。這個過程不會解析配置文件,只是為step3中創(chuàng)建的對象開辟相應(yīng)的字段帝雇。

step5. 直接調(diào)用step3中創(chuàng)建的對象挽牢,傳入配置文件路徑等信息。此時將會解析配置文件摊求,如果未指定配置文件則全部使用step2模式中的默認值禽拔。解析過程會提取step4中注冊了的配置項的值,然后這些配置項就作為step3創(chuàng)建的對象的屬性可以被直接引用室叉。

一個完整的實例如下:

我們使用my.conf來存放所有的配置信息睹栖,使用config.py來表示一個依賴于my.conf中配置信息的模其他模塊。

先設(shè)置my.conf文件茧痕,在oslo.config語境下野来,[DEFAULT]字段不可省略。

#-*-coding:utf-8-*-

# my.conf

[DEFAULT]

#[DEFAULT]不可省略

enabled_apis = ec2, osapi_keystone, osapi_compute

bind_host = 196.168.1.111

bind_port = 9999

[rabbit]

host = 127.0.0.1

port = 12345

use_ssl=true

user_id = guest

password = guest

  接著寫一個腳本文件config.py踪旷,該腳本的功能非常簡單曼氛,直接執(zhí)行時打印該腳本使用到的配置項的值。

#-*-coding:utf-8-*-

# config.py

# Author: D. Wang

from oslo.config import cfg

# 聲明配置項模式

# 單個配置項模式

enabled_apis_opt = cfg.ListOpt('enabled_apis',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? default=['ec2', 'osapi_compute'],

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? help='List of APIs to enable by default.')

# 多個配置項組成一個模式

common_opts = [

? ? ? ? cfg.StrOpt('bind_host',

? ? ? ? ? ? ? ? ? default='0.0.0.0',

? ? ? ? ? ? ? ? ? help='IP address to listen on.'),


? ? ? ? cfg.IntOpt('bind_port',

? ? ? ? ? ? ? ? ? default=9292,

? ? ? ? ? ? ? ? ? help='Port number to listen on.')

? ? ]

# 配置組

rabbit_group = cfg.OptGroup(

? ? name='rabbit',

? ? title='RabbitMQ options'

)

# 配置組中的模式令野,通常以配置組的名稱為前綴(非必須)

rabbit_ssl_opt = cfg.BoolOpt('use_ssl',

? ? ? ? ? ? ? ? ? ? ? ? ? ? default=False,

? ? ? ? ? ? ? ? ? ? ? ? ? ? help='use ssl for connection')

# 配置組中的多配置項模式

rabbit_Opts = [

? ? cfg.StrOpt('host',

? ? ? ? ? ? ? ? ? default='localhost',

? ? ? ? ? ? ? ? ? help='IP/hostname to listen on.'),

? ? cfg.IntOpt('port',

? ? ? ? ? ? ? ? default=5672,

? ? ? ? ? ? ? ? help='Port number to listen on.')

]

# 創(chuàng)建對象CONF舀患,用來充當(dāng)容器

CONF = cfg.CONF

# 注冊單個配置項模式

CONF.register_opt(enabled_apis_opt)

# 注冊含有多個配置項的模式

CONF.register_opts(common_opts)

# 配置組必須在其組件被注冊前注冊!

CONF.register_group(rabbit_group)

# 注冊配置組中含有多個配置項的模式气破,必須指明配置組

CONF.register_opts(rabbit_Opts, rabbit_group)

# 注冊配置組中的單配置項模式聊浅,指明配置組

CONF.register_opt(rabbit_ssl_opt, rabbit_group)

# 接下來打印使用配置項的值

if __name__ =="__main__":

# 調(diào)用容器對象,傳入要解析的文件(可以多個)

  CONF(default_config_files=['my.conf'])


? ? for i in CONF.enabled_apis:

? ? ? ? print ("DEFAULT.enabled_apis: " + i)


? ? print("DEFAULT.bind_host: " + CONF.bind_host)

? ? print ("DEFAULT.bind_port: " + str(CONF.bind_port))

? ? print("rabbit.use_ssl: "+ str(CONF.rabbit.use_ssl))

? ? print("rabbit.host: " + CONF.rabbit.host)

? ? print("rabbit.port: " + str(CONF.rabbit.port))

  執(zhí)行config.py,結(jié)果如下:

DEFAULT.enabled_apis: ec2

DEFAULT.enabled_apis: osapi_keystone

DEFAULT.enabled_apis: osapi_compute

DEFAULT.bind_host: 196.168.1.111

DEFAULT.bind_port: 9999

rabbit.use_ssl: True

rabbit.host: 127.0.0.1

rabbit.port: 12345

  下面的config_test.py不指定配置文件

# config_test.py

from config import CONF

if __name__ =="__main__":

#? CONF(default_config_files=['my.conf'])

? ? CONF()

? ? for i in CONF.enabled_apis:

? ? ? ? print ("DEFAULT.enabled_apis: " + i)


? ? print("DEFAULT.bind_host: " + CONF.bind_host)

? ? print ("DEFAULT.bind_port: " + str(CONF.bind_port))

? ? print("rabbit.use_ssl: "+ str(CONF.rabbit.use_ssl))

? ? print("rabbit.host: " + CONF.rabbit.host)

? ? print("rabbit.port: " + str(CONF.rabbit.port))

  執(zhí)行config_test.py比較結(jié)果差別:

DEFAULT.enabled_apis: ec2

DEFAULT.enabled_apis: osapi_compute

DEFAULT.bind_host: 0.0.0.0

DEFAULT.bind_port: 9292

rabbit.use_ssl: False

rabbit.host: localhost

rabbit.port: 5672

  可以發(fā)現(xiàn)低匙,執(zhí)行config.py時旷痕,成功讀取了配置項的值,而執(zhí)行config_test.py時顽冶,由于沒有指定要解析的配置文件欺抗,所以使用的都是設(shè)置模式時指定的默認值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末强重,一起剝皮案震驚了整個濱河市绞呈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竿屹,老刑警劉巖报强,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拱燃,居然都是意外死亡秉溉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門召嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哮缺,你說我怎么就攤上這事弄跌。” “怎么了尝苇?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵铛只,是天一觀的道長。 經(jīng)常有香客問我糠溜,道長淳玩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任非竿,我火速辦了婚禮蜕着,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘红柱。我一直安慰自己承匣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布锤悄。 她就那樣靜靜地躺著韧骗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铁蹈。 梳的紋絲不亂的頭發(fā)上宽闲,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天众眨,我揣著相機與錄音握牧,去河邊找鬼容诬。 笑死,一個胖子當(dāng)著我的面吹牛沿腰,可吹牛的內(nèi)容都是我干的览徒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼颂龙,長吁一口氣:“原來是場噩夢啊……” “哼习蓬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起措嵌,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤躲叼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后企巢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫慷,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年浪规,在試婚紗的時候發(fā)現(xiàn)自己被綠了或听。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡笋婿,死狀恐怖誉裆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缸濒,我是刑警寧澤足丢,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站庇配,受9級特大地震影響斩跌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讨永,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一滔驶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卿闹,春花似錦揭糕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旋恼,卻和暖如春吏口,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工产徊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昂勒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓舟铜,卻偏偏與公主長得像戈盈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谆刨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344