• 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  
    03 import httplib
    04 import json
    05  
    06 from urlparse import urlparse, urlunparse, urljoin
    07 from urllib import quote
    08 from eventlet.green.httplib import HTTPConnection
    09  
    10 def http_connection(url):
    11     '''
    12     test http_connection
    13     '''
    14     parsed = urlparse(url)
    15     conn = HTTPConnection(parsed.netloc)
    16     return parsed, conn
    17  
    18 def 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  
    29 def 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  
    47 def 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  
    58 if __name__ == '__main__':
    59     get_object()

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

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

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

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

  • 相关阅读:
    LVS-三种负载均衡方式比较
    keepalived和heartbeat区别
    vmware-question
    SQL Server MYSQL 检查点的好处
    MYSQL 引擎的情况
    MYSQL 关闭服务的过程
    SQL Server 行的删除与修改-------------(未完待续P222 deep SQL Server 222 )
    SQL Server一些重要视图 1
    SQL Server 查看数据页面
    SQL Server 向堆表中插入数据的过程
  • 原文地址:https://www.cnblogs.com/zmlctt/p/4217138.html
Copyright © 2020-2023  润新知