IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> oslo: oslo_config组件解析 和代码中的应用 -> 正文阅读

[移动开发]oslo: oslo_config组件解析 和代码中的应用

oslo: oslo_config组件解析

OpenStack中大量使用了一些第三方组件,为了使一些基础组件的接口的统一及更友好的使用,Openstack利用oslo的项目统一了第三方组件的接口。如最常使用的oslo项目:

  • oslo_config
  • oslo_log
  • oslo_messaging
  • stevedore

oslo_config
OpenStack中用于从配置文件及命令行解析配置参数的第三方库。在Openstack中配置文件相关的概念简要介绍如下:

  • 配置文件: INI风格的文件,key=value,形式,以.conf结尾;
  • 配置项(options): 配置文件或命令行中的[key=value]的左值,即key;
  • 配置项的值: [key=value]的右值,即value;
  • 配置组(group): 一组配置项,在配置文件中以[...]开头,如[DEFAULT];

oslo_config的使用:

  1. 声明所需要的配置项,声明配置项的名称、类型、默认值、描述等信息;
  2. 注册配置项
  3. 解析配置文件

oslo_config对配置文件中的值进行解析时,值的优先级从高到低如下:

  1. 命令行
  2. 环境变量
  3. --config-dir?配置文件,默认值:
    ~/.project/project.conf.d/,~/project.conf.d/,/etc/project/project.conf.d/,/etc/project.conf.d/
  4. --config-file指定的配置文件,默认值:
    ~/.project/project.conf,~/project.conf,/etc/project/project.conf,/etc/project.conf

如果一个配置项在多个地方都有定义,则取值的优先级如上,命令行的优先级最高。

#!/usr/bin/env python3.7
#-*-coding:utf-8-*-

import sys

from oslo_config import cfg

# 声明配置项
debug = cfg.BoolOpt("debug",short='d',default=False,help="Turn On Debug.")

# 声明配置项组
grp = cfg.OptGroup(name='API',title="API Opts")

# 声明一个单个配置项
# 此处声明了配置项的名称、默认值、描述信息
host = cfg.IPOpt("host",default="0.0.0.0",help="Listening IP")

# 声明多个配置项,Bool类型及Int类型
api_opts = [
        cfg.BoolOpt('ssl',
                   default=False,
                   help='Use SSL to Connect.'),
                
        cfg.IntOpt('bind_port',
                   default=4000,
                   help='Port number to listen.')
    ]

def add_opts():
        # 注册配置项
        cfg.CONF.register_opt(debug)

        # 注册配置组
        cfg.CONF.register_group(grp)

        # 注册grp配置组下的配置项
        cfg.CONF.register_opt(host,group=grp)
        cfg.CONF.register_opts(api_opts,group=grp)

def add_cli_opts():
        # 注册配置项
        cfg.CONF.register_cli_opt(debug)

add_opts()
add_cli_opts()

cfg.CONF(sys.argv[1:])

print(cfg.CONF.debug)
print(cfg.CONF.API.host)
print(cfg.CONF.API.bind_port)
print(cfg.CONF.API.ssl)

如上,基本步骤如下:

  1. 声明配置项及配置项组
    debug = cfg.BoolOpt("debug",short='d',default=False,help="Turn On Debug.")
    布尔类型,别称:'d',默认值为false。
  2. 注册配置项
    cfg.CONF.register_opt(host,group=grp)
    注册grp组下的host配置项,若未指明组,则为[DEFAULT]下,注册配置项前,需先注册组。
    其中register_cli_opt:注册命令行配置项
  3. 解析配置文件
    cfg.CONF(sys.argv[1:])
    命令行中指明配置文件。
$ python3.7 config.py --help
usage: config [-h] [--config-dir DIR] [--config-file PATH] [--debug]
              [--nodebug]

optional arguments:
  -h, --help          show this help message and exit
  --config-dir DIR    Path to a config directory to pull `*.conf` files from.
                      This file set is sorted, so as to provide a predictable
                      parse order if individual options are over-ridden. The
                      set is parsed after the file(s) specified via previous
                      --config-file, arguments hence over-ridden options in
                      the directory take precedence. This option must be set
                      from the command-line.
  --config-file PATH  Path to a config file to use. Multiple config files can
                      be specified, with values in later files taking
                      precedence. Defaults to None. This option must be set
                      from the command-line.
  --debug, -d         Turn On Debug.
  --nodebug           The inverse of --debug

api.conf:

[DEFAULT]
debug = true

[API]
host = 127.0.0.1
bind_port = 8080
ssl= False

运行示例:

$ python3.7 config.py --config-file api.conf --nodebug
False
127.0.0.1
8080
False

配置项支持的类型:

  • BoolOpt
  • FloatOpt
  • IntOpt
  • IPOpt
  • DictOpt
  • ListOpt
  • MultiStrOpt
  • PortOpt
  • StrOpt

项目中的实际应用

from nova.openstack.common import cfg 的内容

nova/openstack/common/cfg.py


from oslo_config.cfg import *

定义和注册配置文件信息

nova/virt/libvirt/driver.py

nova/virt/libvirt/driver.py

from nova.openstack.common import cfg


#定义配置文件 
lvm_opts = [
    cfg.StrOpt('volume_group',
               default='raidVG',
               help='Name for the VG that will contain exported volumes'),
    cfg.IntOpt('num_shell_tries',
               default=3,
               help='number of times to attempt to run flakey shell commands'),
    cfg.IntOpt('num_iscsi_scan_tries',
               default=3,
               help='number of times to rescan iSCSI target to find volume'),
]

#注册配置文件信息
FLAGS.register_opts(lvm_opts)

代码中调用配置信息

nova.virt.libvirt.driver.LibvirtDriver.active_vg_pvnum
 
def active_vg_pvnum(self, volume_group):
        if not self.check_vg_exist(FLAGS.volume_group):
            return 0

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:39:46  更:2022-05-25 11:40:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:52:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码