设为首页 收藏本站
查看: 891|回复: 0

[经验分享] how to read openstack code: request extension

[复制链接]

尚未签到

发表于 2017-12-5 13:11:52 | 显示全部楼层 |阅读模式
  We have learned resource extension and action extension. This post we will write a request extension
  First see two API call
  

curl -X POST http://liberty-controller01:9696/v2.0/networks.json -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net3", "admin_state_up": true}}'  

  
{"network": {"status": "ACTIVE", "subnets": [], "name": "net3", "provider:physical_network": "physnet1", "admin_state_up": true, "tenant_id": "8c5f13ee6a404759839e48537bdf69ac", "mtu": 0, "router:external": false, "shared": false, "port_security_enabled": true, "provider:network_type": "vlan", "id": "95c955ac-c963-4f53-ab4a-d721fa0cda51", "provider:segmentation_id": 490}}
  

  It run successful. Nothing to say. Then this one
  

curl -X POST http://liberty-controller01:9696/v2.0/networks.json -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net3", "admin_state_up": true, "some_attr":"some_value"}}'  

  
{"NeutronError": {"message": "Unrecognized attribute(s) 'some_attr'", "type": "HTTPBadRequest", "detail": ""}}[iyunv@liberty-controller01 myPluginPKG]#
  

  This one is bad request. But the only difference is the POST body. Neutron think the some_attr is not a attribute of network and it is right. Because this is a core resource and the attribute map of this resource do not have some_attr
  To solve this we need an request extension which actually update the resource attribute map of network. Below are the code
  

from neutron.api import extensions  

  
EXTENDED_ATTRIBUTES_2_0 = {
  'networks': {
  'some_attr': {'allow_post': True,
  'allow_put': False,
  'is_visible': True,
  'default': ''}
  }
  
}
  

  

  
class Myreq(extensions.ExtensionDescriptor):
  @classmethod
  def get_name(cls):
  return "myreq"
  

  @classmethod
  def get_alias(cls):
  return 'myreq'
  

  @classmethod
  def get_description(cls):
  return "myreq"
  

  @classmethod
  def get_updated(cls):
  return "2017-02-08T10:00:00-00:00"
  

  def get_extended_resources(self, *args, **kwargs):
  return EXTENDED_ATTRIBUTES_2_0
  

  You can see we defined a dict in the extension and return it with method get_extended_resources.
  So to implement an request extension is very easy. Define a method called get_extended_resources and return some attributes that you want to added to the original reosurce

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420796-1-1.html 上篇帖子: 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(四)-云主机vip与vip绑定浮动IP 下篇帖子: [原]openstack-kilo--issue(十一)Failed connect to 169.254.169.254:80; No route to ho
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表