diff --git a/core/claude_setup.py b/core/claude_setup.py index 86014b3..5ed6e51 100644 --- a/core/claude_setup.py +++ b/core/claude_setup.py @@ -51,7 +51,7 @@ python ~/.server-connections/ssh.py --status # online/offline | Тип | Команды | |-----|---------| | `ssh`/`telnet` | `ALIAS "cmd"`, `--upload ALIAS local remote`, `--download ALIAS remote local` | -| `s3` (MinIO и др.) | `--s3-buckets ALIAS`, `--s3-ls ALIAS bucket/prefix`, `--s3-upload ALIAS local bucket/key`, `--s3-download ALIAS bucket/key local`, `--s3-delete ALIAS bucket/key`, `--s3-url ALIAS bucket/key [SEC]` | +| `s3` (MinIO и др.) | `--s3-buckets ALIAS`, `--s3-ls ALIAS bucket/prefix`, `--s3-upload ALIAS local bucket/key`, `--s3-download ALIAS bucket/key local`, `--s3-delete ALIAS bucket/key`, `--s3-url ALIAS bucket/key [SEC]`, `--s3-create-bucket ALIAS name` | | `mariadb`/`mssql`/`postgresql` | `--sql ALIAS "SELECT ..."`, `--sql-databases ALIAS`, `--sql-tables ALIAS [db]` | | `redis` | `--redis ALIAS "GET key"`, `--redis-info ALIAS`, `--redis-keys ALIAS "pattern"` | | `grafana` | `--grafana-dashboards ALIAS`, `--grafana-alerts ALIAS` | diff --git a/releases/ServerManager-v1.9.19-win-x64.exe b/releases/ServerManager-v1.9.24-win-x64.exe similarity index 98% rename from releases/ServerManager-v1.9.19-win-x64.exe rename to releases/ServerManager-v1.9.24-win-x64.exe index 907e39e..9e101c9 100644 Binary files a/releases/ServerManager-v1.9.19-win-x64.exe and b/releases/ServerManager-v1.9.24-win-x64.exe differ diff --git a/tools/skill-ssh.md b/tools/skill-ssh.md index 637147d..202e665 100644 --- a/tools/skill-ssh.md +++ b/tools/skill-ssh.md @@ -32,7 +32,7 @@ | `telnet` | `ALIAS "command"` (без SFTP/sudo/ключей) | `--upload`, `--download` | | `mariadb` / `mssql` / `postgresql` | `--sql`, `--sql-databases`, `--sql-tables` | `ALIAS "command"` | | `redis` | `--redis`, `--redis-info`, `--redis-keys` | `ALIAS "command"` | -| `s3` (MinIO, AWS S3, и др.) | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete`, `--s3-url` | `ALIAS "command"`, `--upload`, `--download` | +| `s3` (MinIO, AWS S3, и др.) | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete`, `--s3-url`, `--s3-create-bucket` | `ALIAS "command"`, `--upload`, `--download` | | `grafana` | `--grafana-dashboards`, `--grafana-alerts` | `ALIAS "command"` | | `prometheus` | `--prom-query`, `--prom-targets`, `--prom-alerts` | `ALIAS "command"` | | `winrm` | `--ps`, `--cmd` | `ALIAS "command"` | @@ -213,6 +213,11 @@ python ~/.server-connections/ssh.py --s3-url ALIAS bucket/key 86400 ``` По умолчанию ссылка действует 1 час (3600 сек). Второй аргумент — время жизни в секундах (например 86400 = 24 часа). +### Создать бакет +```bash +python ~/.server-connections/ssh.py --s3-create-bucket ALIAS bucket-name +``` + ### Типичный workflow: "создай папку и залей файл" ```bash # 1. Посмотри бакеты diff --git a/tools/ssh.py b/tools/ssh.py index d0b19da..06a5c48 100644 --- a/tools/ssh.py +++ b/tools/ssh.py @@ -43,6 +43,7 @@ S3 (type: s3): python ssh.py --s3-download ALIAS bucket/key local # download file python ssh.py --s3-delete ALIAS bucket/key # delete object python ssh.py --s3-url ALIAS bucket/key [SEC] # presigned URL (default 3600s) + python ssh.py --s3-create-bucket ALIAS name # create bucket WinRM (type: winrm): python ssh.py --ps ALIAS "Get-Process" # PowerShell via WinRM @@ -1481,6 +1482,17 @@ def s3_url(server: dict, remote_path: str, expires: int = 3600): sys.exit(1) +def s3_create_bucket(server: dict, bucket_name: str): + """Create a new S3 bucket.""" + client = _get_s3_client(server) + try: + client.create_bucket(Bucket=bucket_name) + print(f"Bucket created: {bucket_name}") + except Exception as e: + print(f"ERROR: {e}", file=sys.stderr) + sys.exit(1) + + # ── Grafana commands ────────────────────────────────── def _grafana_request(server: dict, endpoint: str) -> dict: @@ -1791,6 +1803,11 @@ def main(): expires = int(sys.argv[4]) if len(sys.argv) >= 5 else 3600 s3_url(servers[alias], sys.argv[3], expires) sys.exit(0) + if cmd == "--s3-create-bucket" and len(sys.argv) >= 4: + _, servers = load_servers() + alias = _resolve_alias(sys.argv[2], servers) + s3_create_bucket(servers[alias], sys.argv[3]) + sys.exit(0) # ── Grafana commands ── if cmd == "--grafana-dashboards" and len(sys.argv) >= 3: diff --git a/version.py b/version.py index 94dfdf1..4d6524b 100755 --- a/version.py +++ b/version.py @@ -1,6 +1,6 @@ """Version info for ServerManager.""" -__version__ = "1.9.23" +__version__ = "1.9.24" __app_name__ = "ServerManager" __author__ = "aibot777" __description__ = "Desktop GUI for managing remote servers"