Oslo系列之oslo.context

在茫茫沙漠,唯有前时进的脚步才是希望的象征。

在OpenStack中,oslo.context为所有OpenStack组件提供了一个保存请求上下文信息的基类,该类主要有两个作用:一、用来存储一个Web请求的安全信息;二、用来为oslo.log提供上下文详情。本章将详细分析oslo.context组件。

RequestContext基类

在oslo.context组件中,主要定义了RequestContext基类,该类的每个实例化对象都保存了一个Web请求上下文信息。该类中保存的字段信息有:请求的Token信息,用户信息,项目信息,服务信息等;在实例化时,该类会为每个对象生成一个request_id在项目中唯一标识该对象。该类还提供了一系列方法以便其他OpenStack项目调用。其中,比较重要的方法主要有以下几个:

  • global_id():返回一个全局id,如果我们想使用一个全局的request_id时可以调用该方法。
  • from_dict(values, **kwargs):使用给定的字典创建上下文对象。
  • from_environ(environ, **kwargs):使用环境变量创建上下文对象。
  • to_dict():返回一个包含上下文属性的字典。
  • to_policy_values():为oslo.policy组件提供上下文信息。
  • update_store():在当前线程中保存该上下文对象。
  • get_logging_values():为oslo.log组件生成日志信息提供上下文信息。

oslo.context的使用

一般地,OpenStack项目在使用oslo.context时会实现一个继承RequestContext的子类,并在子类中封装项目自身所需的其他上下文属性和方法。如OpenStack nova组件使用oslo.context时便实现了一个nova项目的RequestContext类,nova在继承了oslo.context.RequestContext类之外,还添加了db_connection、mq_connection、timestamp等属性,也添加了get_auth_plugin()、elevated()、can()等方法。

另外,nova还提供了一系列方便的操作上下文的方法,如获取上下文对象的方法get_context()、get_admin_context(),判断用户角色的方法is_user_context()等可以更加方便在Nova项目中使用上下文信息。对于oslo.context的具体使用方法比较简单,在OpenStack各项目中都有不同的应用,在此便不再赘述了。

原文链接:https://blog.csdn.net/Bill_Xiang_/article/details/78458677

-------------本文结束 感谢您的阅读-------------
作者Magiceses
有问题请 留言 或者私信我的 微博
满分是10分的话,这篇文章你给几分