mirror of https://github.com/jumpserver/jumpserver
69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
|
|
import os
|
|
import boto
|
|
import boto.s3.connection
|
|
|
|
from .base import ObjectStorage
|
|
|
|
|
|
class CEPHStorage(ObjectStorage):
|
|
|
|
def __init__(self, config):
|
|
self.bucket = config.get("BUCKET", None)
|
|
self.region = config.get("REGION", None)
|
|
self.access_key = config.get("ACCESS_KEY", None)
|
|
self.secret_key = config.get("SECRET_KEY", None)
|
|
self.hostname = config.get("HOSTNAME", None)
|
|
self.port = config.get("PORT", 7480)
|
|
|
|
if self.hostname and self.access_key and self.secret_key:
|
|
self.conn = boto.connect_s3(
|
|
aws_access_key_id=self.access_key,
|
|
aws_secret_access_key=self.secret_key,
|
|
host=self.hostname,
|
|
port=self.port,
|
|
is_secure=False,
|
|
calling_format=boto.s3.connection.OrdinaryCallingFormat(),
|
|
)
|
|
|
|
try:
|
|
self.client = self.conn.get_bucket(bucket_name=self.bucket)
|
|
except Exception:
|
|
self.client = None
|
|
|
|
def upload(self, src, target):
|
|
try:
|
|
key = self.client.new_key(target)
|
|
key.set_contents_from_filename(src)
|
|
return True, None
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def download(self, src, target):
|
|
try:
|
|
os.makedirs(os.path.dirname(target), 0o755, exist_ok=True)
|
|
key = self.client.get_key(src)
|
|
key.get_contents_to_filename(target)
|
|
return True, None
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def delete(self, path):
|
|
try:
|
|
self.client.delete_key(path)
|
|
return True, None
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def exists(self, path):
|
|
try:
|
|
return self.client.get_key(path)
|
|
except Exception:
|
|
return False
|
|
|
|
@property
|
|
def type(self):
|
|
return 'ceph'
|