OpenStack Swift client开发

如果你搭建好了Swift环境 ,你应该可以通过Swift 命令 来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个python的开源 项目 同样使用apache2.0许可,是Swift的client端,如果你使用java PHP  在github上同样有对应的client端,但是功能有局限性。

开源的好处就是,可以方便学习,第一次看python代码,整理出来流程,加上自己的环境,可以马上就开始应用起来。

Swift 基于HTTP协议,所以不论你用什么语言,只要通过HTTP发送消息给Swift,都可以获取相应的数据,或者进行相应的操作。当然对于定制的需求 你需要修改Swift源码。来实现响应的处理。Swift的API文档在官方网站上可以获取到。

http://docs.openstack.org/api/openstack-object-storage/1.0/content/

python-client的源码非常简单,可以在github上下载,仔细看一下就是一个简单的HTTP客户端,通过shell命令 输入鉴权url username password 和具体的参数 来调用swift service 。

自己写一个小程序 实现如下功能,下载swift服务器上的hello.txt文件,然后打印出来。

上代码

01#!/usr/bin/env python
02 
03import httplib
04import json
05 
06from urlparse import urlparse, urlunparse, urljoin
07from urllib import quote
08from eventlet.green.httplib import HTTPConnection
09 
10def http_connection(url):
11    '''
12    test http_connection
13    '''
14    parsed = urlparse(url)
15    conn = HTTPConnection(parsed.netloc)
16    return parsed, conn
17 
18def json_request(method, url, **kwargs):
19    kwargs.setdefault('headers', {})
20    kwargs['headers']['Content-Type'= 'application/json'
21    kwargs['body'= json.dumps(kwargs['body'])
22    parsed, conn = http_connection(url)
23    conn.request(method, parsed.path, **kwargs)
24    resp = conn.getresponse()
25    body = resp.read()
26    body = json.loads(body)
27    return resp, body
28 
29def get_auth():
30    url = 'http://192.168.4.87:5000/v2.0/'
31    body = {'auth': {'passwordCredentials': {'password''zhoubing',
32        'username':'swift'},'tenantName''service'}}
33    token_url = urljoin(url, "tokens")
34    resp, body = json_request("POST", token_url, body=body)
35    token_id = None
36    try:
37        url = None
38        catalogs = body['access']["serviceCatalog"]
39        for service in catalogs:
40            if service['type'== 'object-store':
41                url = service['endpoints'][0]['publicURL']
42        token_id = body['access']['token']['id']
43    except(KeyError,IndexError):
44        print Error
45    return url, token_id
46 
47def get_object():
48    url, token = get_auth()
49    parsed, conn = http_connection(url)
50    path = '%s/%s/%s' % (parsed.path, quote('myfile'), quote('asd.txt'))
51    method = 'GET'
52    headers = {'X-Auth-Token': token}
53    conn.request(method, path,'',headers)
54    resp = conn.getresponse()
55    body = resp.read()
56    print body
57 
58if __name__ == '__main__':
59    get_object()

第一次写python代码 比较乱 主要是理清思路,熟悉代码的流程。

实用keystone作为swift的鉴权,首先通过get_auth() 获得鉴权的token 和proxy的url

通过get_connection获得连接 然后根据API文档,组成相应的http消息得到,相应的resp,然后通过read()方法读文件的能容

很简单,进行相应的封装,再加上UI就是一个云存储客户端的雏形了!

转载于:https://www.cnblogs.com/zmlctt/p/4217138.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值