ceph 对象存储 创建api

# -*- coding:utf-8 -*-

import boto
import boto.s3.connection
import paramiko

class Accountinfo():
"""
用法详见 http://docs.ceph.org.cn/man/8/radosgw-admin/
"""
def __init__(self):
self.hostname = ‘192.168.44.70‘
self.port = 22
self.username = ‘root‘
self.passwd = ‘123456‘

def new_connect(self):
try:
paramiko.util.log_to_file(‘paramiko.log‘)
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=‘192.168.44.70‘,port=22,username=‘root‘,password=‘123456‘)
return ssh

except Exception as e:
return ‘error‘

def user_manager(self,username,flag):
"""
为s3访问创建radosgw用户
flag: c -> create,d -> delete
"""
ssh = self.new_connect()
if not isinstance(ssh,str):
c_command = ‘/usr/bin/radosgw-admin user create --uid="%s" --display-name="%s"‘ % (username, username.title())
d_command = ‘/usr/bin/radosgw-admin user rm --uid="%s"‘ % (username)

if flag == ‘c‘:
stdin, stdout, stderr = ssh.exec_command(c_command)
outstr = stdout.read()
errstr = stdout.read()
ssh.close()
return outstr,errstr
elif flag == ‘d‘:
stdin, stdout, stderr = ssh.exec_command(d_command)
ssh.close()
return ‘delete %s success‘% username
# return stdout, stderr
else:
ssh.close()
return ‘flag == c or d‘,‘flag error‘

return ‘connect error‘

class CephS3():

# 单例模式

__instance = None

def __init__(self):
self.access_key = "BKOLF8C5319QK2UIMQ09"
self.secret_key = "jBiFwY3LeHh78tM9W6Y8oQUM2VNIbieGVViB3wEB"
self.host = ‘192.168.44.70‘
self.port = 7480
self.conn = boto.connect_s3(
aws_access_key_id= self.access_key,
aws_secret_access_key= self.secret_key,
host = self.host,
port = self.port,
is_secure=False,
calling_format = boto.s3.connection.OrdinaryCallingFormat()
)

@staticmethod
def get_connect():

if CephS3.__instance:
return CephS3.__instance
else:
CephS3.__instance = CephS3().conn
return CephS3.__instance

def list_all_buckets(self):
con = CephS3.get_connect()
all_buckets = con.get_all_buckets()

for bucket in all_buckets:
print("{name}\t{created}".format(name=bucket.name,created=bucket.creation_date))

def create_bucket(self,bucketname):
# con = self.connect()
con = CephS3.get_connect()
all_bucket = con.get_all_buckets()
all_bucket_name = [i.name for i in all_bucket]

try:
if bucketname not in all_bucket_name:
bucket = con.create_bucket(bucketname)
return ‘ok‘
# print(‘Bucket %s create success‘% bucketname)
else:
return ‘fail‘
# print(‘Bucket %s already exists!‘ % bucketname)
except Exception as e:
return str(e)

def delete_bucket(self,bucketname):

con = CephS3.get_connect()
all_bucket = con.get_all_buckets()
all_bucket_name = [i.name for i in all_bucket]

try:
if bucketname in all_bucket_name:
bucket = con.delete_bucket(bucketname)
return ‘ok‘

else:
return ‘fail‘

except Exception as e:
print(str(e))

def list_bucket_object(self,bucketname):

con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
list_buckets = bucket.list()

print("%-10s\t%-10s\t%-10s\n"%(‘Name‘,‘Size‘,‘Modified‘))
for key in list_buckets:
print("{name:<10}\t{size:<10}\t{modified:<10}".format(name=key.name,size=key.size,modified=key.last_modified))

def create_object(self,bucketname,obj_key,obj_value):
"""新建一个内容是字符串 obj_value 的文件 obj_key"""

con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
list_buckets = bucket.list()
obj_keys = [i.name for i in list_buckets]
try:
if obj_key not in obj_keys:
bucket_key = bucket.new_key(obj_key)
bucket_key.set_contents_from_string(obj_value)
return ‘ok‘
return ‘exists‘
except Exception as e:
return str(e)

def modifi_object_acl(self,bucketname,obj_key,acl=‘public-read‘):
"""
修改对象的权限
:param bucketname:
:param obj_key:
:param acl: public-read 公开可读 private 私有
:return:
"""
# con = self.connect()
con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
try:
bucket_key = bucket.get_key(obj_key)
bucket_key.set_canned_acl(acl)
return ‘ok‘
except Exception as e:
return str(e)

def make_obj_url(self,bucketname,obj_key,sign=False):
try:

con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
key = bucket.get_key(obj_key)
if not sign:
key_url_no_sign = key.generate_url(0,query_auth=False,force_http=True)
return key_url_no_sign
key_url_sign = key.generate_url(3600,query_auth=True,force_http=True)
return key_url_sign
except Exception as e:
return str(e)

def download_to_file(self,bucketname,obj_key,dest_file):
try:
# con = self.connect()
con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
key = bucket.get_key(obj_key)
key.get_contents_to_filename(dest_file)
return ‘ok‘
except Exception as e:
return str(e)

def delete_bucket_key(self,bucketname,obj_key):
try:
# con = self.connect()
con = CephS3.get_connect()
bucket = con.get_bucket(bucketname)
bucket.delete_key(obj_key)
return ‘ok‘
except Exception as e:
return str(e)

if __name__ == ‘__main__‘:
cephapi = CephS3()

url = cephapi.make_obj_url(‘bucket_bamboo‘,‘haproxy.txt‘,True)
print(url)

# cephapi.list_bucket_object(‘bucket_bamboo‘)

# 创建用户 获取keys 信息

# um = Accountinfo()
# out, err = um.user_manager(‘wuye‘,‘c‘)
#
# if type(out) == str:
# res = json.loads(out)
# print(json.dumps(res["keys"][0],indent=2))
# else:
# print(out,err)

原文地址:http://blog.51cto.com/wuyebamboo/2324451

时间: 2024-11-05 20:47:47

ceph 对象存储 创建api的相关文章

ceph对象存储(rgw)服务、高可用安装配置

ceph对象存储服务.高可用安装配置 简介:    Ceph本质上就是一个rados,利用命令rados就可以访问和使用ceph的对象存储,但作为一个真正产品机的对象存储服务,通常使用的是Restfulapi的方式进行访问和使用.而radosgw其实就是这个作用,安装完radosgw以后,就可以使用api来访问和使用ceph的对象存储服务了.    首先明白一下架构,radosgw其实名副其实,就是rados的一个网关,作用是对外提供对象存储服务.本质上radosgw(其实也是一个命令)和rbd

Ceph对象存储介绍与安装

一:概念介绍 Ceph对象网关是建立在librados之上的对象存储接口,可为应用程序提供通往Ceph存储集群的RESTful网关, Ceph对象存储支持两个接口 1.S3兼容:为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口2.Swift兼容:为对象存储功能提供与OpenStack Swift Ceph对象存储使用Ceph对象网关守护进程(radosgw),该守护进程是用于与Ceph存储群集进行交互的HTTP服务器,由于它提供与OpenStack Swift

Ceph 对象存储及客户端配置(三)

一.对象存储介绍 作为文件系统的磁盘,操作系统不能直接访问对象存储.相反,它只能通过应用程序级别的API访问.Ceph是一种分布式对象存储系统,通过Ceph对象网关提供对象存储接口,也称为RADOS网关(RGW)接口,它构建在Ceph RADOS层之上. RGW使用librgw (RADOS Gateway Library)和librados,允许应用程序与Ceph对象存储建立连接. RGW为应用程序提供了一个RESTful S3 / swift兼容的API接口,用于在Ceph集群中以对象的形式

基于LAMP php7.1搭建owncloud云盘 与ceph对象存储S3借口整合案例

ownCloud简介:      是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主要功能包括文件管理(内建文件分享).音乐.日历.联系人等等,可在PC和服务器上运行.     简单来说就是一个基于Php的自建网盘.基本上是私人使用这样,因为直到现在开发版本也没有暴露注册功能.我这里采用基于php7.1的LAMP环境搭建这个owncloud 下一篇将介绍和ceph对象存储整合案例 一.环境准备,这里的owncloud是10版本,所以需要php5.6以上的LAMP环境,否则会

Ceph对象存储安装部署及验证

今天来玩下Ceph的对象存储,之前一直觉得对象存储对于玩OpenStack的我来说用不到,但随着越来越多的海量文件的需求,不得不促使我们来学习对象存储.所谓活到老学到老,尤其是我们搞IT的,每天都得学习新技术. 首先呢就是部署一套Ceph环境,这里就不再赘述了,网上好多安装文档,都比较清晰了. 重点说下RGW部分 安装完集群之后 ceph-deploy install --rgw devin-ceph1    #因为是测试所以只用一个rgw 然后创建RGW实例 ceph-deploy rgw c

Ceph对象存储RGW对接企业级网盘OwnCloud三步走

上篇文章我们把Ceph对象存储搭建成功了,但是成功了之后我们怎么用呢?下面我们本文就来讲下Ceph对象存储对接企业私有云网盘OwnCloud. OwnCloud分为企业版和社区版,我们只说社区版,在这里我就不多赘述了. 那么Ceph对接OwnCloud分三步走. 第一:安装Ceph配置RGW对象存储 第二:安装OwnCloud 第三:对接 第一步在上个文章里面已经做了,那么第二步是安装OwnCloud,可以看下我之前的文章进行安装. 如何搭建OwnCloud网盘 主要讲下第三步 要点:网盘节点D

基于redhat7.3 ceph对象存储集群搭建+owncloud S3接口整合生产实践

一.环境准备 安装redhat7.3虚拟机四台 在四台装好的虚拟机上分别加一块100G的硬盘.如图所示: 3.在每个节点上配置主机名 4.集群配置信息如下 admin-node node1 node2 node3 192.168.42.110 192.168.42.111 192.168.42.112 192.168.42.113 deploy.osd*1 mon*1.osd*1. rgw*1.mds*1 mon*1.osd*1 mon*1.osd*1 5.各节点配置yum源 #需要在每个主机上

Ceph对象存储网关安装配置

引言 基于已部署好的Ceph集群,部署一个网关服务器,进行对象存储服务.操作系统CentOS6.5 CEPH0.94.3其实基于librados可以直接进行访问,但是我看了百度,UCLOUD的对象存储,用户在网页上进行文件的上传.下载时,都通过web服务器间接和存储集群打交道,进行了一层隔离,而不是直接和集群进行通信操作.我得理解是便于访问控制以及隔离. 1.依赖包安装 Ceph rados-gateway依赖Apache和FastCGI, 用户的请求先到web服务器,再走rados-gatew

.NET Core HttpClient调用腾讯云对象存储Web API的&quot;ERROR_CGI_PARAM_NO_SUCH_OP&quot;问题

腾讯云提供的对象存储(COS)C# SDK 是基于 .NET Framework 用 WebRequest 实现的,我们直接将这个实现迁移到 .NET Core 是可以正常调用,但后来我们基于 HttpClient 实现,调用 web api 时总是返回 "ERROR_CGI_PARAM_NO_SUCH_OP" 错误. 用 Wireshark 抓包后发现,基于 WebRequest 的实现的请求包开头比基于 HttpClient 的实现多了个 "Preamble: 0d0a&