亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OpenStack配置解析庫oslo.config的使用方法

2019-11-14 17:42:08
字體:
來源:轉載
供稿:網友

  OpenStack的oslo項目旨在獨立出系統中可重用的基礎功能,oslo.config就是其中一個被廣泛使用的庫,該項工作的主要目的就是解析OpenStack中命令行(CLI)或配置文件(.conf)中的配置信息。

  在本文的語境下,有這么幾個概念:

  配置文件:  

    用來配置OpenStack各個服務的ini風格的配置文件,通常以.conf結尾;

  配置項(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的配置組;

  其他模塊:  

    運行時需要根據配置項的值實現具體操作的模塊;

  配置項的模式(option schemas):

    在解析配置文件、獲取配置項的值之前,其他模塊聲明自己需要的配置項。配置文件通常是針對一個完整的服務的,因此其他模塊中可能用不到配置文件中的所有配置項,這樣就必須告訴系統自己依賴于哪些配置項,這個過程就是設置配置項的模式。包括聲明配置項在配置文件的名稱、設置配置項的默認值(一旦配置文件中沒有該配置項而其他模塊又依賴于該配置項,就使用這里聲明的默認值)等等;

  引用(reference):    

    其他模塊解析配置文件,獲取配置項的值后,就可以在下面的實現中使用這些具體的配置值了;

  注冊(register):    

    其他模塊在引用配置項的值之前,必須注冊自己將要引用的那些配置項的模式。也就是說,配置文件中的配置項其他模塊不一定都為其聲明模式,聲明了模式的配置項也不一定為其進行注冊,當然如果不注冊,即使聲明了模式,也無法引用。

 

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

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

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

  step3. 創建一個對象,創建該對象的類充當配置管理器,這個對象作為容器以后將存儲配置項的值。

  step4. 調用step3創建的對象中相應的注冊方法(如:register_opt()),注冊step2中聲明的配置項模式。這個過程不會解析配置文件,只是為step3中創建的對象開辟相應的字段。

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

  

  一個完整的實例如下:

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

  先設置my.conf文件,在oslo.config語境下,[DEFAULT]字段不可省略。 

#-*-coding:utf-8-*-# my.conf[DEFAULT]#[DEFAULT]不可省略enabled_apis = ec2, osapi_keystone, osapi_computebind_host = 196.168.1.111bind_port = 9999[rabbit]host = 127.0.0.1port = 12345use_ssl=trueuser_id = guestpassWord = guest

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

#-*-coding:utf-8-*-# config.py# Author: D. Wangfrom 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.')]# 創建對象CONF,用來充當容器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__":# 調用容器對象,傳入要解析的文件(可以多個)   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))

  執行config.py,結果如下:

DEFAULT.enabled_apis: ec2DEFAULT.enabled_apis: osapi_keystoneDEFAULT.enabled_apis: osapi_computeDEFAULT.bind_host: 196.168.1.111DEFAULT.bind_port: 9999rabbit.use_ssl: Truerabbit.host: 127.0.0.1rabbit.port: 12345

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

# config_test.pyfrom config import CONFif __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))

  執行config_test.py比較結果差別:

DEFAULT.enabled_apis: ec2DEFAULT.enabled_apis: osapi_computeDEFAULT.bind_host: 0.0.0.0DEFAULT.bind_port: 9292rabbit.use_ssl: Falserabbit.host: localhostrabbit.port: 5672

  可以發現,執行config.py時,成功讀取了配置項的值,而執行config_test.py時,由于沒有指定要解析的配置文件,所以使用的都是設置模式時指定的默認值。

  OpenStack的oslo.config項目提供了一種開放的配置項解析工具,可以在其上實現自己需要的命令行和配置文件解析工具,也可以直接應用到自己的項目中,本文對于oslo.config項目的使用方法就介紹到這里。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线视频| 色偷偷偷综合中文字幕;dd| 77777少妇光屁股久久一区| 精品欧美一区二区三区| 欧美日韩国产色| 亚洲女人被黑人巨大进入al| 亚洲欧美日韩高清| 欧美日韩免费网站| 日韩最新免费不卡| 国产在线播放91| 国产精品成久久久久三级| 91老司机在线| 黄色成人av网| 福利精品视频在线| 国产精品永久在线| 国产91亚洲精品| 欧美激情国产高清| 国产精品男人的天堂| 国产日韩欧美在线看| 91精品国产91久久久久| 国产精彩精品视频| 国产精品69精品一区二区三区| 一区二区三区视频免费在线观看| 久久国内精品一国内精品| 亚洲最大成人网色| 91九色综合久久| 91精品国产91久久久久久吃药| 亚洲色在线视频| 最近2019中文字幕在线高清| 日韩精品欧美国产精品忘忧草| 欧美电影免费观看电视剧大全| 国产精品美女在线| 成人妇女免费播放久久久| 国产日本欧美一区二区三区在线| 欧美国产日韩免费| 久久人人爽人人爽人人片av高清| 日韩av在线一区| 国产精品成人一区二区三区吃奶| 欧美高清视频免费观看| 91精品啪在线观看麻豆免费| 亚洲精品一区二区三区婷婷月| 2019国产精品自在线拍国产不卡| 日韩欧美在线视频日韩欧美在线视频| 91极品女神在线| 国产亚洲精品一区二555| 欧美日韩在线视频观看| 粗暴蹂躏中文一区二区三区| 国产91在线播放| 欧美成人免费播放| 亚洲少妇中文在线| 日韩经典一区二区三区| 国产午夜精品全部视频在线播放| 色综合色综合网色综合| 国产精品视频在线播放| 日韩欧美中文字幕在线观看| 久久久成人精品视频| 欧美极品少妇xxxxx| 欧美在线视频观看免费网站| 亚洲精品一区中文字幕乱码| 日韩av不卡电影| 精品成人乱色一区二区| 欧美大奶子在线| 国产va免费精品高清在线观看| 亚洲国产精品va| 青青草一区二区| 欧美色视频日本高清在线观看| 久久在线免费观看视频| 日韩欧美极品在线观看| 在线观看日韩av| 久久精品国产欧美亚洲人人爽| 国产精品中文字幕在线观看| 欧美韩国理论所午夜片917电影| 搡老女人一区二区三区视频tv| 国产一区二区三区四区福利| 国产精品久久久久久亚洲调教| 欧美日韩一区二区在线播放| 国产成人在线亚洲欧美| 日韩高清免费观看| 欧美日韩国产综合视频在线观看中文| 亚洲成人激情视频| 久久久久在线观看| 久久久久久免费精品| 欧美电影电视剧在线观看| 亚洲一区亚洲二区| 午夜欧美不卡精品aaaaa| 国产精品高潮呻吟久久av野狼| 欧美有码在线观看视频| 国产精品电影观看| 亚洲精品一区二区三区婷婷月| 亚洲美女精品久久| 欧美成人在线网站| 国产日韩欧美另类| 午夜精品久久久久久久男人的天堂| 久久99久国产精品黄毛片入口| 欧美中文字幕视频| 国产在线精品自拍| 精品视频在线观看日韩| 美女国内精品自产拍在线播放| 日韩av网站在线| 国产精品自拍偷拍视频| 亚洲xxxx在线| 黑人巨大精品欧美一区二区免费| 亚洲视频国产视频| 久久亚洲私人国产精品va| 亚洲人午夜色婷婷| 亚洲精品免费在线视频| 正在播放国产一区| 欧美一级bbbbb性bbbb喷潮片| 久久久久久久久网站| 色综合久久久888| 精品欧美国产一区二区三区| 一本大道香蕉久在线播放29| 亚洲精品在线观看www| 久久精品视频中文字幕| 韩国三级电影久久久久久| 亚洲精品国产精品国自产在线| 中文国产亚洲喷潮| 粉嫩av一区二区三区免费野| 亚洲精品视频网上网址在线观看| 日产精品99久久久久久| 久久综合久久88| 最近更新的2019中文字幕| 国产精品成人国产乱一区| 亚洲天堂男人的天堂| 日韩在线观看电影| 日本亚洲精品在线观看| 大胆欧美人体视频| 国产一区二区美女视频| 91亚洲精品一区二区| www.xxxx欧美| 欧美大片在线看免费观看| 亚洲精品视频在线播放| 久久久精品中文字幕| 国产精品久久久久久久久久小说| 97视频在线观看免费| 欧美裸体xxxx极品少妇软件| 国产日产久久高清欧美一区| 欧美性猛xxx| 一区二区欧美久久| 亚洲第五色综合网| 91av在线影院| 91国语精品自产拍在线观看性色| 韩剧1988在线观看免费完整版| 91久久嫩草影院一区二区| 久久久久久久影视| 国产精品直播网红| 国产精品吊钟奶在线| 欧美激情国内偷拍| 亚洲人成网7777777国产| 亚洲精品第一国产综合精品| 国产精品久久久久久久天堂| 色噜噜狠狠狠综合曰曰曰88av| 成人精品视频99在线观看免费| 97国产一区二区精品久久呦| 一区二区三区亚洲| 欧日韩不卡在线视频| 日韩亚洲精品电影| 亚洲精品第一国产综合精品| 国产精品99久久久久久久久久久久| 日韩视频永久免费观看| 久久韩国免费视频| 亚洲欧美福利视频| 久久久噜噜噜久久中文字免| 欧美日韩国产123|