mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-05 13:11:54 +00:00
feat: migrating boto to boto3
This commit is contained in:
parent
4728f95634
commit
1c6fcc5826
@ -1,68 +1,74 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
|
import boto3
|
||||||
import os
|
import os
|
||||||
import boto
|
|
||||||
import boto.s3.connection
|
|
||||||
|
|
||||||
from .base import ObjectStorage
|
from .base import ObjectStorage
|
||||||
|
|
||||||
|
|
||||||
class CEPHStorage(ObjectStorage):
|
class CEPHStorage(ObjectStorage):
|
||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.bucket = config.get("BUCKET", None)
|
self.bucket = config.get("BUCKET", "jumpserver")
|
||||||
self.region = config.get("REGION", None)
|
self.region = config.get("REGION", None)
|
||||||
self.access_key = config.get("ACCESS_KEY", None)
|
self.access_key = config.get("ACCESS_KEY", None)
|
||||||
self.secret_key = config.get("SECRET_KEY", None)
|
self.secret_key = config.get("SECRET_KEY", None)
|
||||||
self.hostname = config.get("HOSTNAME", None)
|
self.endpoint = config.get("ENDPOINT", 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:
|
try:
|
||||||
self.client = self.conn.get_bucket(bucket_name=self.bucket)
|
self.client = boto3.client(
|
||||||
except Exception:
|
's3', region_name=self.region,
|
||||||
self.client = None
|
aws_access_key_id=self.access_key,
|
||||||
|
aws_secret_access_key=self.secret_key,
|
||||||
|
endpoint_url=self.endpoint
|
||||||
|
)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
def upload(self, src, target):
|
def upload(self, src, target):
|
||||||
try:
|
try:
|
||||||
key = self.client.new_key(target)
|
self.client.upload_file(Filename=src, Bucket=self.bucket, 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
|
return True, None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return False, e
|
return False, e
|
||||||
|
|
||||||
def exists(self, path):
|
def exists(self, path):
|
||||||
try:
|
try:
|
||||||
return self.client.get_key(path)
|
self.client.head_object(Bucket=self.bucket, Key=path)
|
||||||
except Exception:
|
return True
|
||||||
|
except Exception as e:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def download(self, src, target):
|
||||||
|
try:
|
||||||
|
os.makedirs(os.path.dirname(target), 0o755, exist_ok=True)
|
||||||
|
self.client.download_file(self.bucket, src, target)
|
||||||
|
return True, None
|
||||||
|
except Exception as e:
|
||||||
|
return False, e
|
||||||
|
|
||||||
|
def delete(self, path):
|
||||||
|
try:
|
||||||
|
self.client.delete_object(Bucket=self.bucket, Key=path)
|
||||||
|
return True, None
|
||||||
|
except Exception as e:
|
||||||
|
return False, e
|
||||||
|
|
||||||
|
def generate_presigned_url(self, path, expire=3600):
|
||||||
|
try:
|
||||||
|
return self.client.generate_presigned_url(
|
||||||
|
ClientMethod='get_object',
|
||||||
|
Params={'Bucket': self.bucket, 'Key': path},
|
||||||
|
ExpiresIn=expire,
|
||||||
|
HttpMethod='GET'), None
|
||||||
|
except Exception as e:
|
||||||
|
return False, e
|
||||||
|
|
||||||
|
def list_buckets(self):
|
||||||
|
response = self.client.list_buckets()
|
||||||
|
buckets = response.get('Buckets', [])
|
||||||
|
result = [b['Name'] for b in buckets if b.get('Name')]
|
||||||
|
return result
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type(self):
|
def type(self):
|
||||||
return 'ceph'
|
return 'ceph'
|
||||||
|
1422
poetry.lock
generated
1422
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -164,7 +164,6 @@ azure-keyvault-secrets = "4.9.0"
|
|||||||
psycopg2-binary = "2.9.6"
|
psycopg2-binary = "2.9.6"
|
||||||
pycountry = "^24.6.1"
|
pycountry = "^24.6.1"
|
||||||
# Depend by jms storage
|
# Depend by jms storage
|
||||||
boto = "2.49.0"
|
|
||||||
azure-storage-blob = "12.17.0"
|
azure-storage-blob = "12.17.0"
|
||||||
esdk-obs-python = "3.21.4"
|
esdk-obs-python = "3.21.4"
|
||||||
oss2 = "2.18.1"
|
oss2 = "2.18.1"
|
||||||
|
Loading…
Reference in New Issue
Block a user