之前我们看过了core plugin, service plugin 还有resource extension. resource extension的作用是定义新的资源.而我们说过还有两种extension: action extension 跟 request extension.这一章我们将写一个action extension. action in RESTful openstack中所有的网络服务都是RESTful风格的.但RESTful风格的URL有一个问题,如何表示动作. 像 ne…
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: app…
本章我们将写一个自己的core plugin 和一个resource extension来加深理解.(阅读本文的前提是你已经理解了restful以及stevedore等内容) 什么是 core plugin neutron的plugin有core和service两种.core plugin实现core resource的增删改查,service plugin我们在本文暂不讨论. core resource 有network/subnet/port/subnet-pool.每种资源对应CURD和i…
之前我们了解了neutron的结构,plugin 和 extension等信息.这一章我们看一下neutron如何加载这些plugin和extension.也就是neutron的启动过程.本文涉及的代码较多,而且调用过程复杂... 所以你手头最好有一份liberty版本的neutron代码,参考来看 回顾一下neutron的paste配置文件 [composite:neutron] use = egg:Paste#urlmap /: neutronversions /v2.0: neutrona…
We have learned core plugin, service plugin and extension in last post. Now let`s review: Core Plugin Core plugin manage core resources which are network, subnet, port and subnetpool. Service Plugin Service plugin manage higher services. extension Ex…
今天这一章节非常重要.我们知道neutron是一个非常复杂的系统,由很多组件构成.研究这样一个复杂的系统,正确的顺序应该是现在宏观上对其整体结构有所了解,然后再由针对性的对其组件进行深入了解.本章要做的事情就是介绍neutron 宏观上的架构. 首先看一下下图: 人 - - > Neutron Server - - > Plugin - -> message queue - -> Agent (Extension) | | MySQL database 因为是markdown 编辑…
本文的目的不是介绍openstack.我们这里假设你已经知道了openstack是什么,能够做什么.所以目的是介绍如何阅读openstack的代码.通过读代码来进一步学习openstack. 转载要求你懂的:) 目的是懂python和web编程的人看完就能懂neutron代码, 如果没达到这个目的,说明写的不够清晰,欢迎各种建议 因为我们更关注neutron组件,所以后面的内容都是以neutron为基础 读openstack代码需要对很多技术有一定了解,如:wsgi/paste deploy/w…
上一篇<iOS开发 之 Share Extension>介绍了分享扩展的开发与使用,本篇主要还是讲述在系统分享菜单中最底下一栏的功能扩展:Action Extension,该扩展跟Share Extension实现比较类似只是在使用场景上进行了区分,Share Extension主要用于将Host应用中的内容分享到Container应用中,而Action Extension则主要用于将Host应用中的内容进行对应处理,原则上来说作用范围比Share Extension要广. 那么,下面将详细讲…
最近在做ios的action extension,这里记录一下添加图标的方法. 在Action Extension的target里面的Build Settings,里面的Asset Catalog Compiler - Options下面有个Asset Catalog App Icon Set Name,把需要的图标名字加进去就行. 在Assets.xcassets里面,右边的Target Membership要把action extension勾起来.…
When coding a web system, you have to think about an important problem, how to map urls to logic. Openstack use routes to solve this problem. What is routes Routes is a python package used to map urls to program logic. Normally this is the web framew…
上文说到需要在 /neutronclient/v2_0/myextension/extension.py 中分别定义五个 class:List/Show/Create/Delete/UpdateExtension.具体形式如下: import argparse import logging from neutronclient.neutron import v2_0 as neutronV20 from neutronclient.openstack.common.gettextutils im…
通过上几章的介绍,我们现在的 myplugin 文件夹看上去应该是这样的: - neutron/ - plugins/ - myplugin/ - __init__.py - plugin.py - extensions/ - __init__.py - myextension.py - db/ - __init__.py - db.py - models.py 我们的plugin.py看上去应该是类似这样的: from neutron import neutron_plugin_base_v2…
前两篇文章讨论了怎么写一个 Neutron 的插件.但是最基本的插件只包括 Network, Port,和 Subnet 三种资源.如果需要引入新的资源,比如一个二层的 gateway 的话,就需要在插件的基础上再写一个 extension, 也就是扩展. Neutron 已经预定义了很多扩展,可以参看 neutron/extensions 下面的文件,我在这里就不一一列举了.如果正好有一种是你需要的,那直接拿过来用就好了.如果需要自己从头搭起的话,可以现在 自己的 plugin 文件夹下面创建…
学习了WSGI/Paste deploy后,还需要对一些在openstack中一些package有一些了解,才能更好的理解openstack的代码 What is stevedore 我们在写代码的时候通常把一个一个的功能块独立编写,甚至发布一定的规则和接口由第三方编写,然后在运行时根据实际情况来选择加载哪些功能模块.这样的好处是松耦合,灵活,而且便于协作. stevedore就是一个很好的帮助动态加载代码的工具,openstack中很多plugin就是通过stevedore加载的. 下面通过一…
要读懂本篇,你至少得写过一个python的web程序,并且把它部署到web服务器上过. 什么是wsgi 假设你写了一个python的web程序,并部署到了nginx上,那么一个http request的处理流程一般是下面这样: client/浏览器(发送请求) - - - - > web服务器(转发该请求) - - - - > 你的程序(1. 处理请求.2.生成结果.3.返回结果) | | V client/浏览器(收到结果) <- - - -web服务器(接受你的程序返回的结果,并返回…
接着之前一篇文章,再来谈谈 Extension 的具体实现问题.我使用的是本地数据库加远程API调用的方法,所以先要定义一下数据库中 myextension 如何存储.首先,我们可以在自己的 plugin 根目录下新建一个 db 文件夹,以及三个文件: - neutron/ - plugins/ - myplugin/ - __init__.py - plugin.py - extensions/ - db/ - __init__.py - db.py - models.py db.py 用来存…
本篇分为以下几个部分 paste 是什么 怎样使用paste paste of neutron paste 是什么 WSGI 是python 中application 和 web server互通的标准. 我们知道了wsgi 中包括 app, middleware , server而且middleware可以有很多个.wsgi结构的系统最大的好处就是middleware像积木一样,可以灵活的添加组成不同的功能. 我们上一篇文章中,把2个middleware和一个app组合到了一起,但我们采用的写…
Neutron 里面的 extension 和 plugin 是非常相似的两个概念,我花了好久才貌似搞懂了两者的区别,还不一定完全正确. 在OpenStack 的官网wiki中,可以找到它们两个的定义: Plugin: Neutron exposes a logical API to define network connectivity between devices from other OpenStack services (e.g., vNICs from Nova VMs). The…
Action扩展 注:此教程来源于http://www.raywenderlich.com的<iOS8 by Tutorials> 1.准备 本次教程利用网站bitly.com进行 bitly网站进行对网络链接的精简化,比如将YouTube某个视频链接转化为bit.ly/1wOl2zf这种形式:同时,该网站提供对链接进行数据分析等服务,直接在链接后+“+”即可查看流量.点击量等信息,比如 bit.ly/1wOl2zf+ .     1.注册点击:https://bitly.com/a/sign…
一.App Extension的介绍 App Extension可以让你扩展你APP的自定义功能和内容,使用户可以在与其他应用或者系统进行互动的时候去使用它.app extension即为本文所说的extension.extension并不是一个独立的app,它有一个包含在app bundle中的独立bundle,extension的bundle后缀名是.appex.其生命周期也和普通app不同,这些后文将会详述.extension不能单独存在,必须有一个包含它的containing app.扩…
本文转载至 http://mobile.51cto.com/iphone-464809.htm 用程序扩展最初于WWDC 2014大会上正式亮相,这是一种将iOS应用程序功能扩展至系统其它组成部分的途径.而且能够实现更为出色的跨应用通信效果. AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载! 应用程序扩展最初于WWDC 2014大会上正式亮相,这是一种将iOS应用程序功能扩展至系统其它组成部分的途径.而且能够实现更为出色的跨应用通信效果. 举例为说,大家可以利用Today扩展创…
采用struts2 小伙伴非常希望更改或删除action扩展,本文将帮助你实现 struts2-core-2.3.16.jar , 下载链接: http://repo1.maven.org/maven2/org/apache/struts/struts2-core/2.3.16/ org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter , 这个struts2处理请求的函数doFilter . 在这里使用了 pre…
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plugin-2.x.x.jar. 虽说是零配置的,但struts.xml还是少不了的,配置如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache…
1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Controller 中必然需要访问web资源:如域对象中读写属性,读取Cookie,获取realPath... 3.如何访问? 1.和Servlet API 解耦的方式:只能访问有限的Servlet API 对象,且只能访问有限的方法(读取请求的参数,读写域对象的属性,使Session对象失效等等) -->…
最近在做项目开发过程中犯了一个很低级的错误,在这里列举出来,供大家参考借鉴:我希望通过Url请求一个Action,最终通过服务器的处理能得到一个Json串,所以我在Url中体现这一特点,将action的扩展名写为xxaction.json,在web.xml中将struts2过滤设置成了全部拦截,代码如下: <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.…
一.解耦方式 特点:对web资源进行了封装,便于单元测试. 实现:ActionContext和接口方式 1.ActionContext 特点:Action执行的上下文对象.保存了执行Action所需要的所有对象 使用:1.获取ActionContext  2.获取application,session.request,parameter资源  3.打印显示 1.获取ActionContext ActionContext.getContext() 调用自身的静态方法得到实例 采用的是单例模式 可以…
通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系. 通配符映射规则: 若找到多个匹配,没有通配符的那个将胜出: 若指定的动作不存在,Struts将会尝试把这URI与任何一个包含着通配符*的动作名进行匹配: 被通配符匹配的URI字符串的字串可以通过{1}.{2}来引用.{1}匹配第一个子字符串,{2}匹配第二个字串...: {0}匹配整个URI 若Struts找到的带有通配符的匹配不止一个,则按先后顺序进…
1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生ServletAPI. 2.在Struts2中为什么要访问WEB资源? B/S应用中的Controller必然会有场景需要访问WEB资源:向域对象中读写属性,读取Cookie,获取realPath等. 3.在Struts2中如何访问WEB资源? a)和ServletAPI解耦的方式:只能有限的ServletAP…
1,首先在struts.xml里添加如下代码:注意位置 <constant name="struts.action.extension" value="do,action" /> 注意 后来做测试发现这句话如果加了 就不能在uri调通action,所以还是去掉了. 2,在web.xml的欢迎首页配置action <welcome-file-list> <welcome-file>index.action</welcome-f…
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 将.…