OpenStack公共组件oslo之四——oslo.context

来源:互联网 发布:unity3d程序员 编辑:程序博客网 时间:2024/06/05 07:59

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

1. 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组件生成日志信息提供上下文信息。

2. 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各项目中都有不同的应用,在此便不再赘述了。
阅读全文
0 0
原创粉丝点击