如何拓展OpenStack nova

来源:互联网 发布:centos jdk rpm 编辑:程序博客网 时间:2024/04/30 16:02

OpenStack nova api有核心资源与扩展资源,这里记录的是如何拓展OpenStack nova api的拓展资源

1./nova/api/openstack/compute/contrib目录下是nova的扩展资源,在此目录下创建我们的代码,文件名为my_extension.py,应为类名的小写,内容如下例

from nova.api.openstack import extensionsfrom nova.api.openstack import wsgiimport webobfrom webob import excfrom nova import dbfrom nova import exceptionfrom nova.api.openstack import extensionsauthorize = extensions.extension_authorizer('compute', 'my_extension')class MyExtensionController(wsgi.Controller):       def index(self, req):             result = {}             context = req.environ['nova.context']             authorize(context)             result["key"] =  "index"             return result       def create(self, req):             result = {}             context = req.environ['nova.context']             authorize(context)             result["key"] =  "create"             return result       def show(self, req, id):             result = {}             context = req.environ['nova.context']             authorize(context)                     result["key"] =  "show"             return result        def update(self, req):             result = {}             context = req.environ['nova.context']             authorize(context)              result["key"] =  "update"             return result        def delete(self, req, id):             return webob.Response(status_int=202)class My_extension(extensions.ExtensionDescriptor):    """my first extension."""    name = "MyExtension"    alias = "os-my-extension"     namespace = "........"    updated = "....."    def get_resources(self):        resources = []        res = extensions.ResourceExtension('os-my-extension',                         MyExtensionController(),                         member_actions={})        resources.append(res)        return resources    def get_controller_extensions(self):        controller = MyExtensionController()        extension = extensions.ControllerExtension(self, 'servers', controller)        return [extension]

重启nova服务,用如下代码测试

import httplib2http = httplib2.Http()url = 'http://controller:8774/v2/944fbff812a64d00bb12b347f9404e1e/os-my-extension/1'headers = {'X-Auth-Project-Id': 'admin', 'User-Agent': 'python-novaclient', 'Accept': 'application/json','X-Auth-Token': u'7f81cae370e04c8c8e310cad0b917c7b'}response, content = http.request(url, 'GET', headers=headers)print responseprint content

调用的将是show函数,content内容为{"key":"show"}

或者使用curl

curl -v -X GET -H 'X-Auth-Token: 1c6e358a3cc1456db14fc73051ef39c7' http://controller:8774/v2/944fbff812a64d00bb12b347f9404e1e/os-my-extension/1  | python -mjson.tool

2 0
原创粉丝点击