申明:本文主要以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'