声明:
本博客欢迎转载,但请保留原作者信息!
作者:柯晓东
团队:华为杭州OpenStack团队
为了降低代码冗余度,openstack社区开发了很多公共库。通过这些公共库,可以很容易弄出一个完善鉴权、分布式、易配置、带调用链日志的REST服务。
oslo库的缺点是需要的背景知识比较多,英文文档写的又很简单,要真正用起来,没有几个demo会寸步难行。本文的目的就是通过demo,降低大家使用oslo库的难度。
1. oslo常用组件的一览表
库名 | 作用 | 背景知识 |
oslo.config | 配置文件 | 无 |
oslo.utils | 工具库 | 无 |
oslo.service | 带ssl的REST服务器 | wsgi |
oslo.log + oslo.context | 带调用链的日志系统 | 无 |
oslo.messaging | RPC调用 | amqp |
oslo.db | 数据库 | sqlalchemy |
oslo.rootwrap | Linux的sudo | 无 |
oslo.serialization | 序列化 | 无 |
oslo.i18n | 国际化 | 无 |
oslo.policy | 权限系统 | deploy paste |
oslo.middleware | pipeline | deploy paste |
keystonemiddleware | 用户系统 | deploy paste + keystone |
oslo_test | 测试 | unittest |
2. 配置文件 oslo.config
它把配置项直接融入你的代码内,例子如下:
app.conf
[DEFAULT]
username=app
[rabbit]
host = 192.168.1.7
port = 5672
myconfig.py
# -*- coding: utf-8 -*-
import sys
from oslo_config import cfg
#默认组的配置项
service_opts = [
cfg.StrOpt('username',
default='default',
help='user name'),
cfg.StrOpt('password',
help='password')
]
#自定义配置组
rabbit_group = cfg.OptGroup(
name='rabbit',
title='RabbitMQ options'
)
# 配置组中的多配置项模式
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 = cfg.CONF
#注册默认组的配置项
CONF.register_opts(service_opts)
#配置组必须在其组件被注册前注册!
CONF.register_group(rabbit_group)
#注册配置组中含有多个配置项的模式,必须指明配置组
CONF.register_opts(rabbit_Opts, rabbit_group)
#设置默认的日志文件名
CONF(sys.argv[1:], default_config_files=['app.conf'])
#使用配置项
print ("username=%s rabbitmq.host=%s " % (CONF.username, CONF.rabbit.host))
3. 工具库 oslo.utils
函数名 | 作用 |
oslo_utils.encodeutils.exception_to_unicode(exc) | 异常消息转unicode |
oslo_utils.encodeutils.safe_decode(text, incoming=None, errors='strict') | 其他编码转unicode |
oslo_utils.encodeutils.safe_encode(text, incoming=None, encoding='utf-8', errors='strict') | unicode转其他编码,默认utf-8 |
oslo_utils.encodeutils.to_utf8(text) | unicode转utf-8 |
oslo_utils.eventletutils.fetch_current_thread_functor() | 获取当前线程的结构体 |
oslo_utils.fileutils.delete_if_exists(path) | 删除文件 |
oslo_u |