openstack swift middleware开发
首先MiddleWare核心代码,这段代码卸载swift的源代码目录下,~/swift/swift/common/middleware下新建deletionpreventing.py:
import os
from swift.common.swob import Request, Response class DeletionPreventingMiddleware(object):
def __init__(self, app,conf):
self.app = app
print "vincent middleware"
print app
def __call__(self, env, start_response):
print "it in deletionprevention middleware"
if env['REQUEST_METHOD'] != 'DELETE':
print "not put method"
return self.app(env, start_response)
return Response( status=403, body="Delete prohibited", content_type="text/plain")(env, start_response)
def filter_factory(global_conf, **local_conf):
conf = global_conf.copy()
conf.update(local_conf)
print conf
def deletionpreventing_filter(app):
print "deletion"
return DeletionPreventingMiddleware(app, conf)
return deletionpreventing_filter
在/etc/swift/proxy-server.conf中添加中间件
[pipeline:main]
pipeline = catch_errors healthcheck cache ratelimit tempauth deletionpreventing proxy-logging proxy-server
[filter:deletionpreventing]
use = egg:swift#deletionpreventing
myconf=value1
其中deletionpriventing就是我们自己定义的中间件
然后在~/swift/swift.egg-info目录下的entry_point.txt中添加中间件:
deletionpreventing = swift.common.middleware.deletionpreventing:filter_factory
在~/swift/setup.cfg中添加中间件(这一步可以不做)
deletionpreventing = swift.common.middleware.deletionpreventing:filter_factory
测试运行:
swift@vincent-virtual-machine ~/swift $ curl -v -H "X-Storage-User:test:tester" -H "X-Storage-Pass:testing" http://127.0.0.1:8080/auth/v1.0
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port (#)
> GET /auth/v1. HTTP/1.1
> User-Agent: curl/7.35.
> Host: 127.0.0.1:
> Accept: */*
> X-Storage-User:test:tester
> X-Storage-Pass:testing
>
< HTTP/1.1 200 OK
< X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_test
< X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45
< Content-Type: text/html; charset=UTF-8
< X-Storage-Token: AUTH_tkf36387dd367b474383cfac60979bed45
< X-Trans-Id: tx0b4c7f7dee284e0d9dd5b-005630e592
< Content-Length: 0
< Date: Wed, 28 Oct 2015 15:11:14 GMT
<
* Connection #0 to host 127.0.0.1 left intact
swift@vincent-virtual-machine ~/swift $
查看列表:
swift@vincent-virtual-machine ~/swift $ curl -v -H "X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45" http://127.0.0.1:8080/v1/AUTH_test/
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port (#)
> GET /v1/AUTH_test/ HTTP/1.1
> User-Agent: curl/7.35.
> Host: 127.0.0.1:
> Accept: */*
> X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45
>
< HTTP/1.1 200 OK
< Content-Length: 20
< X-Account-Object-Count: 2
< X-Account-Storage-Policy-Policy-0-Bytes-Used: 12
< X-Account-Storage-Policy-Policy-0-Container-Count: 4
< X-Timestamp: 1444721178.82674
< X-Account-Storage-Policy-Policy-0-Object-Count: 2
< X-Account-Bytes-Used: 12
< X-Account-Container-Count: 4
< Content-Type: text/plain; charset=utf-8
< Accept-Ranges: bytes
< X-Trans-Id: tx1533138aaa0c4c6b99dfc-005630e60f
< Date: Wed, 28 Oct 2015 15:13:19 GMT
<
ab
ab2
hello
hello1
* Connection #0 to host 127.0.0.1 left intact
swift@vincent-virtual-machine ~/swift $
测试PUT请求:
swift@vincent-virtual-machine ~/swift $ curl -X PUT -v -H "X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45" http://127.0.0.1:8080/v1/AUTH_test/ab3
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port (#)
> PUT /v1/AUTH_test/ab3 HTTP/1.1
> User-Agent: curl/7.35.
> Host: 127.0.0.1:
> Accept: */*
> X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45
>
< HTTP/1.1 201 Created
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
< X-Trans-Id: tx6010eaabf2e64f4fa69dd-005630e642
< Date: Wed, 28 Oct 2015 15:14:10 GMT
<
* Connection #0 to host 127.0.0.1 left intact
swift@vincent-virtual-machine ~/swift $ curl -v -H "X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45" http://127.0.0.1:8080/v1/AUTH_test/
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /v1/AUTH_test/ HTTP/1.1
> User-Agent: curl/7.35.0
> Host: 127.0.0.1:8080
> Accept: */*
> X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45
>
< HTTP/1.1 OK
< Content-Length:
< X-Account-Object-Count:
< X-Account-Storage-Policy-Policy--Bytes-Used:
< X-Account-Storage-Policy-Policy--Container-Count:
< X-Timestamp: 1444721178.82674
< X-Account-Storage-Policy-Policy--Object-Count:
< X-Account-Bytes-Used:
< X-Account-Container-Count:
< Content-Type: text/plain; charset=utf-
< Accept-Ranges: bytes
< X-Trans-Id: tx6c0f7ff0121740a190b6f-005630e646
< Date: Wed, Oct :: GMT
<
ab
ab2
ab3
hello
hello1
* Connection # to host 127.0.0.1 left intact
PUT成功
测试DELETE请求:
swift@vincent-virtual-machine ~/swift $ curl -X DELETE -v -H "X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45" http://127.0.0.1:8080/v1/AUTH_test/ab3
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port (#)
> DELETE /v1/AUTH_test/ab3 HTTP/1.1
> User-Agent: curl/7.35.
> Host: 127.0.0.1:
> Accept: */*
> X-Auth-Token: AUTH_tkf36387dd367b474383cfac60979bed45
>
< HTTP/1.1 403 Forbidden
< Content-Length: 17
< Content-Type: text/plain
< X-Trans-Id: tx5426c7feb84c41f29b837-005630e66f
< Date: Wed, 28 Oct 2015 15:14:55 GMT
<
* Connection #0 to host 127.0.0.1 left intact
Delete prohibitedswift@vincent-virtual-machine ~/swift $
DELETE请求失败,说明中间件起作用了
openstack swift middleware开发的更多相关文章
- OpenStack Swift client开发
如果你搭建好了Swift环境 ,你应该可以通过Swift 命令 来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个pytho ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- Openstack Swift中间件编写
关于openstack swift的资料可以看这里,这里还有这里. 准备环境 从零开始接触的同学可以先从swift的all in one部署开始学习,在本机搭建好swift环境就可以进行简单的测试了. ...
- 理解 OpenStack Swift (3):监控和一些影响性能的因素 [Monitoring and Performance]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- OpenStack Swift集群与Keystone的整合使用说明
之前已经介绍了OpenStack Swift集群和Keystone的安装部署,最后来讲一讲Swift集群与Keystone的整合使用吧. 1. 简介 本文档描述了Keystone与Swift集群的整合 ...
- OpenStack Swift集群部署流程与简单使用
之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...
- Openstack Swift 原理、架构与 API 介绍
OpenStack Swift 开源项目提供了弹性可伸缩.高可用的分布式对象存储服务,适合存储大规模非结构化数据.本文将深入介绍 Swift 的基本设计原理.对称式的系统架构和 RESTful API ...
随机推荐
- 使用Eclipse进行PHP的服务器端调试
最近工作需要对PHP的服务器端代码进行远程调试,涉及到Eclipse里环境的设置.在网上找了很多资料,大多不全,或者缺少配图,于是把自己做的过程中遇到的问题记录了下来,希望对需要的朋友们有所帮助. 首 ...
- tcp 三次握手四次挥手
1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说 ...
- Java后端学习路线_备战
SpringCloud项目实战 Dubbo项目实战 项目实战应涵括哪些技术: 缓存.消息队列 WEB应用服务器(Weblogic.Jetty.JBoss.WebSphere) NoSQL(MongoD ...
- linux 搜索文本
find -type f -name '*.php'|xargs grep '127.0.0.1' 搜索所有.php 内容 127.0.0.1 转自:http://www.cnblogs.com/w ...
- 清除oracle归档日志
清除oracle归档日志 1. 连接oracle报如下错误 ORA-00257: archiver error. Connect internal only, until freed 产生原因:出现O ...
- 关于JVM内存模型,GC策略以及类加载器的思考
JVM内存模型 Sun在2006年将Oracle JDK开源最终形成了Open JDK项目,两者在绝大部分的代码上都保持一致.JVM的内存模型是围绕着原子性(操作有且仅有一个结果).可见性(racin ...
- <Spring Cloud>入门五 hystrix
1.服务熔断 1.1引入坐标 <dependency> <groupId>org.springframework.cloud</groupId> <artif ...
- mysql单实例多库与多实例单库
一.单实例多库: 一个mysql实例,创建多个数据目录. 规划: 实例路径:/usr/local/mysql 数据目录路径: (1)/usr/local/mysql/data (2)/usr/loca ...
- Verilog仿真事件队列
1.分层的事件队列 2.执行事件的队列 3.仿真时间的计算 4.同一层事件,无先后顺序 这个点:觉得Verilog与systemVerilog比较,Verilog比较笼统,systemVerilog则 ...
- tomcat 403错误和ls: cannot open directory '.': Permission denied
在centos7 linux系统上使用docker进行tomcat部署项目测试的时候发现第一个错误:浏览器返回403 错误,显然是一个权限问题,禁止访问.下面是我一步一步的操作: 1 使用的docke ...