mirror of https://github.com/jumpserver/jumpserver
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
|
|
import os
|
|
|
|
from azure.storage.blob import BlobServiceClient
|
|
|
|
from .base import ObjectStorage
|
|
|
|
|
|
class AzureStorage(ObjectStorage):
|
|
|
|
def __init__(self, config):
|
|
self.account_name = config.get("ACCOUNT_NAME", None)
|
|
self.account_key = config.get("ACCOUNT_KEY", None)
|
|
self.container_name = config.get("CONTAINER_NAME", None)
|
|
self.endpoint_suffix = config.get("ENDPOINT_SUFFIX", 'core.chinacloudapi.cn')
|
|
|
|
if self.account_name and self.account_key:
|
|
self.service_client = BlobServiceClient(
|
|
account_url=f'https://{self.account_name}.blob.{self.endpoint_suffix}',
|
|
credential={'account_name': self.account_name, 'account_key': self.account_key}
|
|
)
|
|
self.client = self.service_client.get_container_client(self.container_name)
|
|
else:
|
|
self.client = None
|
|
|
|
def upload(self, src, target):
|
|
try:
|
|
self.client.upload_blob(target, src)
|
|
return True, None
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def download(self, src, target):
|
|
try:
|
|
blob_data = self.client.download_blob(blob=src)
|
|
os.makedirs(os.path.dirname(target), 0o755, exist_ok=True)
|
|
with open(target, 'wb') as writer:
|
|
writer.write(blob_data.readall())
|
|
return True, None
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def delete(self, path):
|
|
try:
|
|
self.client.delete_blob(path)
|
|
return True, False
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def exists(self, path):
|
|
resp = self.client.list_blobs(name_starts_with=path)
|
|
return len(list(resp)) != 0
|
|
|
|
def list_buckets(self):
|
|
return list(self.service_client.list_containers())
|
|
|
|
@property
|
|
def type(self):
|
|
return 'azure'
|