OpenStack Swift client開發

若是你搭建好了Swift環境 ,你應該能夠經過Swift 命令 來嘗試去測試上傳下載等功能,這是由於在安裝Swift的時候,一般會安裝一個python-swiftclient客戶端,這個一個python的開源項目 一樣使用apache2.0許可,是Swift的client端,若是你使用java PHP  在github上一樣有對應的client端,可是功能有侷限性。java

開源的好處就是,能夠方便學習,第一次看python代碼,整理出來流程,加上本身的環境,能夠立刻就開始應用起來。python

Swift 基於HTTP協議,因此不論你用什麼語言,只要經過HTTP發送消息給Swift,均可以獲取相應的數據,或者進行相應的操做。固然對於定製的需求 你須要修改Swift源碼。來實現響應的處理。Swift的API文檔在官方網站上能夠獲取到。git

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

python-client的源碼很是簡單,能夠在github上下載,仔細看一下就是一個簡單的HTTP客戶端,經過shell命令 輸入鑑權url username password 和具體的參數 來調用swift service 。shell

本身寫一個小程序 實現以下功能,下載swift服務器上的hello.txt文件,而後打印出來。apache

上代碼json

#!/usr/bin/env python

import httplib
import json

from urlparse import urlparse, urlunparse, urljoin
from urllib import quote 
from eventlet.green.httplib import HTTPConnection 

def http_connection(url):
	'''
	test http_connection
	'''
	parsed = urlparse(url)
	conn = HTTPConnection(parsed.netloc)
	return parsed, conn

def json_request(method, url, **kwargs):
	kwargs.setdefault('headers', {})
	kwargs['headers']['Content-Type'] = 'application/json'
	kwargs['body'] = json.dumps(kwargs['body'])
	parsed, conn = http_connection(url)
	conn.request(method, parsed.path, **kwargs)
	resp = conn.getresponse()
	body = resp.read()
	body = json.loads(body)
	return resp, body

def get_auth():
	url = 'http://192.168.4.87:5000/v2.0/'
	body = {'auth':	{'passwordCredentials': {'password': 'zhoubing',
		'username':'swift'},'tenantName': 'service'}}
	token_url = urljoin(url, "tokens") 
	resp, body = json_request("POST", token_url, body=body)
	token_id = None
	try:
		url = None
		catalogs = body['access']["serviceCatalog"]
		for service in catalogs:
			if service['type'] == 'object-store':
				url = service['endpoints'][0]['publicURL']
		token_id = body['access']['token']['id']
	except(KeyError,IndexError):
	    print Error
	return url, token_id

def get_object():
	url, token = get_auth()
	parsed, conn = http_connection(url)
	path = '%s/%s/%s' % (parsed.path, quote('myfile'), quote('asd.txt'))
	method = 'GET'
	headers = {'X-Auth-Token': token}
	conn.request(method, path,'',headers)
	resp = conn.getresponse()
	body = resp.read()
	print body

if __name__ == '__main__':
	get_object()

第一次寫python代碼 比較亂 主要是理清思路,熟悉代碼的流程。小程序

實用keystone做爲swift的鑑權,首先經過get_auth() 得到鑑權的token 和proxy的urlswift

經過get_connection得到鏈接 而後根據API文檔,組成相應的http消息獲得,相應的resp,而後經過read()方法讀文件的能容api

很簡單,進行相應的封裝,再加上UI就是一個雲存儲客戶端的雛形了!

相關文章
相關標籤/搜索