申明:本文主要以neutronclient为例进行说明
在请求neutronserver时,需要先创建neutronclient,再通过neutronclient访问neutron server。例如:dash board访问neutron server 时,需要在horirzon/openstack_dashboard/api/neutron.py文件中创建neutronclient.
例如在list router时,函数如下:
def router_list(request, **params): routers = neutronclient(request).list_routers(**params).get('routers') return [Router(r) for r in routers]
函数调用neutronclient的list_routers函数。
neutronclient定义如下:
def neutronclient(request): insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None) c = neutron_client.Client(token=request.user.token.id, auth_url=base.url_for(request, 'identity'), endpoint_url=base.url_for(request, 'network'), insecure=insecure, ca_cert=cacert) return c
from neutronclient.v2_0 import client as neutron_client因为当前用的是2.0版本,所以在v2_0中创建的neutronclient。创建时带入了token id。
在neutronclient/v2_0/client.py中 client定义如下
class Client(ClientBase):def __init__(self, **kwargs): """Initialize a new client for the Neutron v2.0 API.""" super(Client, self).__init__(**kwargs) self._register_extensions(self.version) client继承ClientBase,在初始化时首先调用父类的构造函数。class ClientBase(object):def __init__(self, **kwargs): """Initialize a new client for the Neutron v2.0 API.""" super(ClientBase, self).__init__() self.retries = kwargs.pop('retries', 0) self.raise_errors = kwargs.pop('raise_errors', True) self.httpclient = client.construct_http_client(**kwargs) self.version = '2.0' self.format = 'json'

本文以Neutronclient为例,详细阐述了在访问Neutron Server时如何处理和注入token。在请求过程中,首先在Horizon/OpenStack_Dashboard/api/neutron.py中创建Neutronclient,接着通过client的get函数及retry_request函数,最终在do_request中将token信息放入HTTP头。当首次请求无token时,会进行获取token的操作,KeystoneMiddleware则负责从头部分析并验证token。
最低0.47元/天 解锁文章
3708

被折叠的 条评论
为什么被折叠?



