cephfs java api_ceph rbd 封装api(示例代码)

1.安装python,uwsgi,nginx环境

pip安装省略

yumgroupinstall"Developmenttools"

yuminstallzlib-develbzip2-develpcre-developenssl-develncurses-develsqlite-develreadline-develtk-devel

yuminstallpython-devel

pipinstalluwsgi

2.明白 Restful API

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

3.了解flask框架

http://www.pythondoc.com/flask-restful/first.html

4.调用python插件库

http://docs.ceph.org.cn/rbd/librbdpy/

5.写接口程序

#!/usr/bin/env python

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

from flask import Flask, jsonify, make_response

import rados

import rbd

from flask.ext.httpauth import HTTPBasicAuth

import time

‘‘‘

ceph 接口封装,主要实现 CRD 功能

curl xxx.xx.xx.xx2/ceph/v1.0/rbd -u admin:d41d8cd98f00b204e9fdsafdsafdasf333f

curl -X POST xxx.xx.xx.xx/ceph/v1.0/rbd/images/V0/10234556 -u admin:d8cd98f00b204e9fdsafdsafdasf333f

curl -X DELETE xxx.xx.xx.xx/ceph/v1.0/rbd/images/cai-ceph-a3 -u admin:d8cd98f00b204e9fdsafdsafdasf333f

作者: 蔡锡生

‘‘‘

auth = HTTPBasicAuth()

application = Flask(__name__)

application.debug = True

def connect_ceph():

cluster = rados.Rados(conffile=‘/etc/ceph/ceph.conf‘)

cluster.connect()

ioctx = cluster.open_ioctx(‘rbd‘)

return ioctx

@auth.get_password

def get_password(username):

if username == ‘admin‘:

return ‘d8cd98f00b204e9fdsafdsafdasf333f‘

return None

@auth.error_handler

def unauthorized():

return make_response(jsonify({‘error‘: ‘Unauthorized access‘}), 401)

@application.route(‘/‘)

def index():

return "Hello, world"

@application.route(‘/ceph/v1.0/rbd‘, methods=[‘GET‘])

@auth.login_required

def get_rbd_list():

ioctx = connect_ceph()

rbd_inst = rbd.RBD()

images = rbd_inst.list(ioctx)

return jsonify({"code": 200, "info": images})

@application.route(‘/ceph/v1.0/rbd/images//‘, methods=[‘POST‘])

@auth.login_required

def create_volume(image_name, size):

ioctx = connect_ceph()

rbd_inst = rbd.RBD()

try:

rbd_inst.create(ioctx, image_name, size)

return jsonify({"code": 200, "info": "create volume success"})

except Exception as e:

return jsonify({"code": 400, "info": "create volume failure\r\n"+e.message})

@application.route(‘/ceph/v1.0/rbd/images/‘,methods=[‘DELETE‘])

@auth.login_required

def delete_rbd_image(image_name):

if image_name == ‘‘ or len(image_name) == 0:

return jsonify({"code": 400, "info": "parameter can‘t be null"})

ioctx = connect_ceph()

print dir(rbd)

rbd_inst = rbd.RBD()

if image_name in rbd_inst.list(ioctx):

try:

time.sleep(3)

rbd_inst.remove(ioctx, image_name)

return jsonify({"code": 200, "info": "delete success"})

except Exception as e:

if e.message == ‘error removing image‘:

delete_rbd_image(image_name)

return jsonify({"code": 400, "info": e.message})

else:

return jsonify({"code": 403, "info": "requests image_name not be exist"})

if __name__ == ‘__main__‘:

application.run(host=‘0.0.0.0‘, port=80)

6.uwsgi 配置

vim uwsgi.ini

[uwsgi]

master=true

wsgi-file=manage.py

callable=application

socket=/opt/soft/python-ceph-api/ceph-api.sock

chmod-socket=664

processes=10

threads=4

buffer-size=32768

touch-reload=/opt/soft/python-ceph-api

module=rbd_ap

7.nginx 配置

vim  /etc/nging/conf.d/ceph_api.conf

upstreamscloud_django{

#serverunix:///path/to/your/mysite/mysite.sock;#forafilesocket

serverunix:///opt/soft/python-ceph-api/ceph-api.sock;#forawebportsocket(we‘llusethisfirst)

}

server{

#theportyoursitewillbeservedon

listen20000;

#thedomainnameitwillservefor

#server_namewww.scloud.cn;#substituteyourmachine‘sIPaddressorFQDN

charsetutf-8;

#maxuploadsize

client_max_body_size75M;#adjusttotaste

#Djangomedia

location/media{

#alias/opt/soddft/scloud/media;#yourDjangoproject‘smediafiles-amendasrequired

}

location/static{

#alias/opt/soft/scloud/static;#yourDjangoproject‘sstaticfiles-amendasrequired

}

#Finally,sendallnon-mediarequeststotheDjangoserver.

location/{

uwsgi_passscloud_django;

include/etc/nginx/uwsgi_params;#theuwsgi_paramsfileyouinstalled

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值