• openstack-wsgi的route中添加api流程具体解释(os-networks)添加


    感谢朋友支持本博客。欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免。欢迎指正!

    如有转载,请保留源作者博客信息。


    Better Me的博客blog.csdn.net/tantexian

    如需交流,欢迎大家博客留言。

    在前面文章中,已经具体介绍了。怎样从页面dashboard调用novaclient然后生成一个url地址 。或从启动nova --debug list 然后调用novaclient然后生成URL地址

    url地址形如: GET /v2/b077619bde964a4eb924db869fba977d/servers/detail

    今天文章中要解说的是当我们以后生成了这样一个url了,下一步wsgi框架又是怎样依据url去调用nova底层对应的代码。


    解说这个之前,先回顾下查看routes已公布的api。

    很多其它详情请查看文章:openstack_ice之wsgi具体解释(paste从ini配置文件->routesr具体公布流程)


    1、首先将route mapper打印信息出来:
    vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py

    重新启动openstack-nova-api服务

    service  openstack-nova-api restart
    tailf /var/log/nova/api.log
    以上打印的route信息,就是底层通过wsgi,将api以加入到route的mapper。公布给外边调用。

    2、接下来解说怎样加入自己定义api,并加入到route mapper中,公布出来给外部调用.
    注:接下来以网络模块为例,添加一个test_api接口。

    下图为未加入前,network的route信息:

    通过之前的文章分析,找到wsgi的入口:
    vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

    os_network为openstack封装的,用来添加映射route mapper路由的类:

    中加入下图代码:test_member:post、test_collection:
    每次加入完毕须要又一次公布须要重新启动openstack-nova-api服务。
    重新启动后查看os-network路由信息例如以下图:

    如上图发现test_member、test_collection路由信息公布成功。

    member_actions公布的api是针对每一个特定的对象,比如获取id为1的person所有信息。

    因此须要在url前面添加id字段属性。

    collection_actions公布的api是针对对象集合,比如获取全部person的信息。

    跟多关于route信息请參考文章wsgi-restful-routes具体解释

    3、解说:公布api成功,后台的route控制器接收到匹配的url之后。怎样控制调用后台代码
    url的产生大致有三种方式:
    1:用dashboard通过novaclient组装。(网络的由neutronclient组装,简单起见,兴许文章默认仅仅提及novaclient)
    2:通过系统命令比如nova list产生。
    3:通过curl自己组装。

    第一和另外一种方式。请參考之前相应文章具体解释。

    接下来具体介绍下假设通过curl调用已公布的route,开发自己定义api。

    注:底层api开发。多採用第三种方式进行。


    第一步获取token:
    运行nova --debug list:
    当中X-Auth-Token后面的值为须要获取的token。
    第二步:
    将token值加入到环境变量中(也能够不加入环境变量,每次请求时带上)
    vim  vim .bashrc

    这样以后就能够直接使用$token获取token的值。
    export .bashrc文件
    echo $token将看到token值

    第三步:发送url请求:
    curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/servers/f664204b-d4ec-4d01-aec9-757719a8d06b' -X GET -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"

    相应的route为:

    当运行上述url请求时候:则相应找到上述路由。


    4、请求自己定义的路由test_collection:
    依据路由信息,拼接url为:

    curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection' -X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"
    错误为404没有找到:

    打开route公布源代码:
    vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

    进入到路由控制器:NetworkController():
    能够看到路由控制器类有方法show(),delete()等。
    在控制器类定义test_collection方法,例如以下图:
    重新启动nova-api服务加入的代码生效。(每次改动api模块代码则必须重新启动服务,后面将不再反复)

    再次请求url:
    curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection' -X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"
    api日志:

    在test_collection函数中,加入自己定义的底层代码就可以。

    到此加入底层api完毕。


  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议123:程序集不必与命名空间同名
    【转】编写高质量代码改善C#程序的157个建议——建议122:以<Company>.<Component>为命名空间命名
    【转】编写高质量代码改善C#程序的157个建议——建议121:为应用程序设定运行权限
    【转】编写高质量代码改善C#程序的157个建议——建议119:不要使用自己的加密算法
    【转】编写高质量代码改善C#程序的157个建议——建议118:使用SecureString保存密钥等机密字符串
    看后有感,请努力吧,趁年轻
    springmvc图片上传
    七月份,工作总结
    switch… case 语句的用法
    ibatis动态查询
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6913387.html
Copyright © 2020-2023  润新知