Jelajahi Sumber

!2 ad minio_manage

pcacc 1 Minggu lalu
induk
melakukan
91b4db16fe
1 mengubah file dengan 126 tambahan dan 0 penghapusan
  1. 126 0
      scriptBase/minio_manage.py

+ 126 - 0
scriptBase/minio_manage.py

@@ -0,0 +1,126 @@
+from minio import Minio
+from minio.error import S3Error
+import json
+import io
+
+class MinIO_globalCfg:
+    endpoint = "1.94.225.168:6614"
+    access_key = "dongri"
+    secret_key = "12345678"
+    bucket_name = "dongri"
+    secure = False
+
+
+class MinIOConfigManager:
+    def __init__(self, endpoint, access_key, secret_key, bucket_name="config-bucket"):
+        self.client = Minio(
+            endpoint,
+            access_key=access_key,
+            secret_key=secret_key,
+            secure=False  # 根据实际环境调整 HTTPS
+        )
+        self.bucket_name = bucket_name
+        self._ensure_bucket_exists()
+
+    def _ensure_bucket_exists(self):
+        """确保存储桶存在"""
+        try:
+            if not self.client.bucket_exists(self.bucket_name):
+                self.client.make_bucket(self.bucket_name)
+        except S3Error as e:
+            raise Exception(f"Bucket operation failed: {e}")
+
+    def set_config(self, key, value):
+        try:
+            # 显式展示 value 的处理流程
+            data_bytes = json.dumps(value).encode('utf-8')  # 转为字节
+
+            # 创建文件流对象
+            stream = io.BytesIO(data_bytes)
+            stream.seek(0)  # 重置指针位置[6](@ref)
+            
+            # 上传到 MinIO(value_bytes 即处理后的 value)
+            self.client.put_object(
+                bucket_name=self.bucket_name,
+                object_name=key,
+                data=stream,  # 最终使用 value
+                length=len(data_bytes)
+            )
+            print(f"Config '{key}' saved.")
+        except Exception as e:
+            print(f"Error: {e}")
+
+    def get_config(self, key):
+        try:
+            response = self.client.get_object(self.bucket_name, key)
+            data = response.read().decode('utf-8')  # 正确调用 read() 方法
+            return data
+        except S3Error as e:
+            if e.code == "NoSuchKey":
+                print(f"Config '{key}' not found.")
+                return None
+            print(f"Error fetching config: {e}")
+            return None
+        finally:
+            if 'response' in locals():
+                response.close()
+
+    def list_configs(self):
+        """列出所有配置键"""
+        try:
+            objects = self.client.list_objects(self.bucket_name)
+            return [obj.object_name for obj in objects]
+        except S3Error as e:
+            print(f"Error listing configs: {e}")
+            return []
+
+    def delete_config(self, key):
+        """删除配置"""
+        try:
+            self.client.remove_object(self.bucket_name, key)
+            print(f"Config '{key}' deleted.")
+        except S3Error as e:
+            print(f"Error deleting config: {e}")
+
+def testMinIO():
+    client = Minio("1.94.225.168:6614", access_key="dongri", secret_key="12345678", secure=False)
+    # 创建桶并上传文件
+    value = {"key": "value"}  # 可以是任意数据
+    data_bytes = json.dumps(value).encode('utf-8')  # 转为字节
+
+    # 创建文件流对象
+    stream = io.BytesIO(data_bytes)
+    stream.seek(0)  # 重置指针位置[6](@ref)
+    client.put_object(
+                bucket_name="test-bucket",
+                object_name="tesss111112st",
+                data=stream,
+                length=len(data_bytes),
+            )
+    print("功能验证成功")
+
+if __name__ == "__main__":
+    #testMinIO()
+    
+    # 初始化客户端(替换为你的 MinIO 地址和密钥)
+    config_manager = MinIOConfigManager(
+        endpoint=MinIO_globalCfg.endpoint,
+        access_key=MinIO_globalCfg.access_key,
+        secret_key=MinIO_globalCfg.secret_key,
+        bucket_name=MinIO_globalCfg.bucket_name
+    )
+    
+    # 设置配置
+    config_manager.set_config("database", {"host": "127.0.0.1", "port": 3306})
+    config_manager.set_config("app_settings", {"theme": "dark", "timeout": 30})
+
+    # 获取配置
+    db_config = config_manager.get_config("database")
+    print("Database config:", db_config)  # 输出: {'host': '127.0.0.1', 'port': 3306}
+
+    # 列出所有配置键
+    print("All config keys:", config_manager.list_configs())  # 输出: ['database', 'app_settings']
+
+    # 删除配置
+    config_manager.delete_config("app_settings")
+