fufu-cloud-cli 0.11.0__tar.gz → 0.11.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. {fufu_cloud_cli-0.11.0/src/fufu_cloud_cli.egg-info → fufu_cloud_cli-0.11.1}/PKG-INFO +5 -5
  2. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/README.md +4 -4
  3. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/pyproject.toml +1 -1
  4. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/__init__.py +1 -1
  5. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/capabilities.json +5 -5
  6. fufu_cloud_cli-0.11.1/src/fufu_cloud_cli/gateway_contract.py +15 -0
  7. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/infrastructure.py +3 -3
  8. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1/src/fufu_cloud_cli.egg-info}/PKG-INFO +5 -5
  9. fufu_cloud_cli-0.11.0/src/fufu_cloud_cli/gateway_contract.py +0 -8
  10. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/LICENSE +0 -0
  11. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/MANIFEST.in +0 -0
  12. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/setup.cfg +0 -0
  13. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/__main__.py +0 -0
  14. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/api_backend.py +0 -0
  15. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/aws_errors.py +0 -0
  16. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/aws_lambda.py +0 -0
  17. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/aws_output.py +0 -0
  18. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/bigquery.py +0 -0
  19. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/capacity.py +0 -0
  20. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/cli.py +0 -0
  21. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/cloud_data.py +0 -0
  22. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/cloudflare.py +0 -0
  23. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/control.py +0 -0
  24. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/docker_backend.py +0 -0
  25. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/errors.py +0 -0
  26. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/gcloud_environment.py +0 -0
  27. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/gcloud_output.py +0 -0
  28. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/gcp_infra.py +0 -0
  29. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/gcp_sdk.py +0 -0
  30. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/gcs.py +0 -0
  31. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/http_runtime.py +0 -0
  32. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/iac_state.py +0 -0
  33. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/lambda_adapter.py +0 -0
  34. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/limits.py +0 -0
  35. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/manifest.py +0 -0
  36. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/object_transfer.py +0 -0
  37. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/observability.py +0 -0
  38. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/public_access.py +0 -0
  39. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/pubsub.py +0 -0
  40. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/pulumi-endpoints.json +0 -0
  41. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/pulumi_bridge.py +0 -0
  42. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/remote_compute.py +0 -0
  43. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/runtime/functions/Dockerfile +0 -0
  44. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/runtime/ingress/Dockerfile +0 -0
  45. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/runtime/ingress/proxy.py +0 -0
  46. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/runtime_sdk.py +0 -0
  47. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/s3_highlevel.py +0 -0
  48. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/secrets.py +0 -0
  49. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/serverless.py +0 -0
  50. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/__init__.py +0 -0
  51. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/aws.py +0 -0
  52. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/aws_data.py +0 -0
  53. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/common.py +0 -0
  54. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/google.py +0 -0
  55. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/google_pubsub.py +0 -0
  56. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/remote_state.py +0 -0
  57. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/runner.py +0 -0
  58. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/terraform_bridge/storage.py +0 -0
  59. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/usage.py +0 -0
  60. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/vendor/AWS-CLI-LICENSE.txt +0 -0
  61. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/vendor/__init__.py +0 -0
  62. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli/vendor/aws_text.py +0 -0
  63. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli.egg-info/SOURCES.txt +0 -0
  64. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli.egg-info/dependency_links.txt +0 -0
  65. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli.egg-info/entry_points.txt +0 -0
  66. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli.egg-info/requires.txt +0 -0
  67. {fufu_cloud_cli-0.11.0 → fufu_cloud_cli-0.11.1}/src/fufu_cloud_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fufu-cloud-cli
3
- Version: 0.11.0
3
+ Version: 0.11.1
4
4
  Summary: FUFU Cloud CLI for tenant-scoped mock cloud development and deployment
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  Requires-Python: >=3.10
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
  只供 FUFU mock 環境使用;不會把部署轉送到正式雲端。
30
30
 
31
31
  0.11.0 新增獨占 GPU VM 的租用命令。需由平台啟用並驗證對應實體節點;
32
- 支援的 RTX 3060 為整卡直通至 KVM 客體,可執行 NVIDIA 驅動與 CUDA。
32
+ 支援的 RTX 3060 以專用 GPU 提供給 VM,可執行 NVIDIA 驅動與 CUDA。
33
33
  停止 VM 仍保留整卡,刪除後才釋放。GPU 使用中或已保留會明確拒絕,
34
34
  不會自動中斷其他工作。CLI 不包含節點 SSH 金鑰、主機裝置管理程式或平台設定。
35
35
 
@@ -54,8 +54,8 @@ S3 bucket tags。需配套 FUFU API;不支援 bucket versioning、retention、
54
54
  KMS、bucket IAM、GCS bucket labels 或 force destroy。
55
55
 
56
56
  0.10.0 新增 Compute Engine/EC2 VM 與 GKE/EKS 介面的實際運算命令。
57
- 需要啟用相應 infrastructure backend 的 FUFU 服務端;VM 使用 KVM/KubeVirt,
58
- 叢集使用獨立 Kubernetes API 與共用節點,均不是官方雲端資源。
57
+ 需要啟用相應功能的 FUFU 服務端;提供實際 VM 與獨立 Kubernetes API,
58
+ 叢集使用共用運算資源,均不是官方雲端資源。
59
59
  支援 VM 建立、SSH 指令、停止/啟動與刪除,以及叢集建立、查詢、
60
60
  get-credentials/update-kubeconfig、waiter 與刪除。
61
61
  取得憑證後可使用標準 kubectl 部署 Deployment、Service、Job 及受管 GPU 容器。
@@ -145,7 +145,7 @@ BigQuery 是 tenant emulator 的 GoogleSQL 子集,無 DML/DDL、load/export
145
145
 
146
146
  0.9.4 新增 GCS generation/metageneration 條件、`storage objects describe/update/list`、8 KiB 自訂 metadata 與二進位 `cat`。競爭寫入、過期條件、CLI metadata 和官方 gcloud 輸出欄位已對照驗收;不相符條件回傳 `PRECONDITION_FAILED`/HTTP 412。新功能需要同步更新 FUFU Console、GCS 儲存映像和 Cloud Shell。儲存升級前須停寫並備份完整 volume;新 metadata 格式可讀舊資料,回滾須還原升級前備份。
147
147
 
148
- 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離 Docker 驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
148
+ 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離環境驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
149
149
 
150
150
  0.9.1 統一所有 CLI API 請求的 `User-Agent: fufu-cloud-cli`,涵蓋物件傳輸、
151
151
  Cloudflare 靜態檔案部署、IaC 遠端 state 與 Cloud Shell session,避免沿用
@@ -5,7 +5,7 @@
5
5
  只供 FUFU mock 環境使用;不會把部署轉送到正式雲端。
6
6
 
7
7
  0.11.0 新增獨占 GPU VM 的租用命令。需由平台啟用並驗證對應實體節點;
8
- 支援的 RTX 3060 為整卡直通至 KVM 客體,可執行 NVIDIA 驅動與 CUDA。
8
+ 支援的 RTX 3060 以專用 GPU 提供給 VM,可執行 NVIDIA 驅動與 CUDA。
9
9
  停止 VM 仍保留整卡,刪除後才釋放。GPU 使用中或已保留會明確拒絕,
10
10
  不會自動中斷其他工作。CLI 不包含節點 SSH 金鑰、主機裝置管理程式或平台設定。
11
11
 
@@ -30,8 +30,8 @@ S3 bucket tags。需配套 FUFU API;不支援 bucket versioning、retention、
30
30
  KMS、bucket IAM、GCS bucket labels 或 force destroy。
31
31
 
32
32
  0.10.0 新增 Compute Engine/EC2 VM 與 GKE/EKS 介面的實際運算命令。
33
- 需要啟用相應 infrastructure backend 的 FUFU 服務端;VM 使用 KVM/KubeVirt,
34
- 叢集使用獨立 Kubernetes API 與共用節點,均不是官方雲端資源。
33
+ 需要啟用相應功能的 FUFU 服務端;提供實際 VM 與獨立 Kubernetes API,
34
+ 叢集使用共用運算資源,均不是官方雲端資源。
35
35
  支援 VM 建立、SSH 指令、停止/啟動與刪除,以及叢集建立、查詢、
36
36
  get-credentials/update-kubeconfig、waiter 與刪除。
37
37
  取得憑證後可使用標準 kubectl 部署 Deployment、Service、Job 及受管 GPU 容器。
@@ -121,7 +121,7 @@ BigQuery 是 tenant emulator 的 GoogleSQL 子集,無 DML/DDL、load/export
121
121
 
122
122
  0.9.4 新增 GCS generation/metageneration 條件、`storage objects describe/update/list`、8 KiB 自訂 metadata 與二進位 `cat`。競爭寫入、過期條件、CLI metadata 和官方 gcloud 輸出欄位已對照驗收;不相符條件回傳 `PRECONDITION_FAILED`/HTTP 412。新功能需要同步更新 FUFU Console、GCS 儲存映像和 Cloud Shell。儲存升級前須停寫並備份完整 volume;新 metadata 格式可讀舊資料,回滾須還原升級前備份。
123
123
 
124
- 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離 Docker 驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
124
+ 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離環境驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
125
125
 
126
126
  0.9.1 統一所有 CLI API 請求的 `User-Agent: fufu-cloud-cli`,涵蓋物件傳輸、
127
127
  Cloudflare 靜態檔案部署、IaC 遠端 state 與 Cloud Shell session,避免沿用
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fufu-cloud-cli"
7
- version = "0.11.0"
7
+ version = "0.11.1"
8
8
  description = "FUFU Cloud CLI for tenant-scoped mock cloud development and deployment"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,3 +1,3 @@
1
1
  """FUFU CLI 與本機部署工具;相容範圍見 capabilities.json。"""
2
2
 
3
- __version__ = "0.11.0"
3
+ __version__ = "0.11.1"
@@ -365,7 +365,7 @@
365
365
  "limitations": [
366
366
  "single-host-configurable-storage-capacity-default-2GiB-per-tenant",
367
367
  "default-30-day-log-retention",
368
- "bounded-durable-spool-and-Docker-log-rotation",
368
+ "bounded-durable-spool-and-log-rotation",
369
369
  "no-sinks-alerts-or-native-Monitoring-Trace-API",
370
370
  "no-new-IaC-resources"
371
371
  ]
@@ -547,7 +547,7 @@
547
547
  "create-list-describe-delete", "stop-start", "guest-ssh-command", "exclusive-gpu-vm"
548
548
  ],
549
549
  "limitations": ["requires-FUFU-infrastructure-backend", "Debian-12-only", "private-network", "single-node-disk", "GPU-requires-enabled-validated-node", "GPU-exclusive-until-delete", "no-GPU-hotplug-or-live-migration", "no-official-IaC-provider"],
550
- "reason": "實際 KVM/KubeVirt VM、持久磁碟與 SSH 指令;原生風格指令子集,無官方雲端資源。"
550
+ "reason": "實際 VM、持久磁碟與 SSH 指令;原生風格指令子集,無官方雲端資源。"
551
551
  },
552
552
  "gcp-gke": {
553
553
  "name": "GKE",
@@ -556,7 +556,7 @@
556
556
  "mode": "simplified",
557
557
  "operations": ["create-list-describe-delete", "get-credentials", "kubectl-workloads", "GPU-container-jobs"],
558
558
  "limitations": ["requires-FUFU-infrastructure-backend", "shared-workers", "single-control-plane-replica", "no-workload-PVC", "no-public-LoadBalancer", "no-interactive-exec-or-portforward", "no-official-IaC-provider"],
559
- "reason": "獨立 vCluster Kubernetes API 與控制面資料;共用受管節點,支援標準 kubectl 工作負載子集。"
559
+ "reason": "獨立 Kubernetes API 與持久化管理資料;共用受管節點,支援標準 kubectl 工作負載子集。"
560
560
  },
561
561
  "gcp-vpc": {
562
562
  "name": "VPC / Firewall",
@@ -650,7 +650,7 @@
650
650
  "mode": "simplified",
651
651
  "operations": ["run-describe-terminate-instances", "stop-start", "instance-waiters", "exclusive-gpu-vm"],
652
652
  "limitations": ["requires-FUFU-infrastructure-backend", "Debian-12-only", "private-network", "single-node-disk", "GPU-requires-enabled-validated-node", "GPU-exclusive-until-delete", "no-GPU-hotplug-or-live-migration", "no-official-IaC-provider"],
653
- "reason": "實際 KVM/KubeVirt VM;支援生命週期與 scoped instance ID,無官方 EC2 網路或完整 API。"
653
+ "reason": "實際 VM;支援生命週期與 scoped instance ID,無官方 EC2 網路或完整 API。"
654
654
  },
655
655
  "aws-ecs": {
656
656
  "name": "ECS / Fargate",
@@ -664,7 +664,7 @@
664
664
  "mode": "simplified",
665
665
  "operations": ["create-list-describe-delete", "update-kubeconfig", "cluster-waiters", "kubectl-workloads", "GPU-container-jobs"],
666
666
  "limitations": ["requires-FUFU-infrastructure-backend", "shared-workers", "single-control-plane-replica", "no-workload-PVC", "no-public-LoadBalancer", "no-interactive-exec-or-portforward", "no-official-IaC-provider"],
667
- "reason": "獨立 vCluster Kubernetes API 與控制面資料;FUFU 短效認證,不是 AWS 原生 IAM 或託管控制面。"
667
+ "reason": "獨立 Kubernetes API 與持久化管理資料;FUFU 短效認證,不是 AWS 原生 IAM 或託管控制面。"
668
668
  },
669
669
  "aws-app-runner": {
670
670
  "name": "App Runner",
@@ -0,0 +1,15 @@
1
+ """管理者配置的 API gateway;容器標籤只能由受信任的宿主控制器設定。"""
2
+ import hashlib
3
+
4
+
5
+ # Exact compatibility with the retired gateway label; no broader label matching.
6
+ LEGACY_GATEWAY_LABEL = '261dbe856e015a13f8939aaae3315dd86b7f00294b5b6eaacca591e339859561'
7
+
8
+
9
+ def api_gateway_labels(labels):
10
+ if not isinstance(labels, dict):
11
+ return False
12
+ bridge = labels.get('io.fufu.platform-bridge')
13
+ legacy = isinstance(bridge, str) and len(bridge) <= 128 and hashlib.sha256(bridge.encode()).hexdigest() == LEGACY_GATEWAY_LABEL
14
+ return labels.get('com.docker.compose.service') == 'local-cloud-console' or \
15
+ bridge == 'console-v1' or legacy
@@ -1,4 +1,4 @@
1
- """Native command subset backed by the private RKE2 infrastructure adapter."""
1
+ """Native command subset for FUFU managed compute and cluster services."""
2
2
  import base64
3
3
  import datetime
4
4
  import hashlib
@@ -27,7 +27,7 @@ VM_TYPES = {'e2-micro': (2, 1), 'e2-small': (2, 2), 'e2-medium': (2, 4), 'e2-sta
27
27
 
28
28
 
29
29
  def warn(kind):
30
- sys.stderr.write('FUFU runtime: ' + ('KVM VM with a private network and one-node persistent disk; optional exclusive GPU on validated nodes, retained until deletion.\n' if kind == 'vm' else
30
+ sys.stderr.write('FUFU runtime: ' + ('VM with a private network and persistent disk without automatic failover; optional exclusive GPU in supported locations, retained until deletion.\n' if kind == 'vm' else
31
31
  'Independent Kubernetes API with shared worker nodes; private ClusterIP services, no workload PVCs or native cloud IAM.\n'))
32
32
 
33
33
 
@@ -49,7 +49,7 @@ def wait(api, kind, name, desired='RUNNING', seconds=480):
49
49
 
50
50
 
51
51
  def fufu_fields(value):
52
- return {key: value.get(key) for key in ['name', 'state', 'mode', 'backend', 'node', 'limitations', 'spec'] if key in value}
52
+ return {key: value.get(key) for key in ['name', 'state', 'mode', 'node', 'limitations', 'spec'] if key in value} | {'backend': 'fufu'}
53
53
 
54
54
 
55
55
  def gcp_shape(value, kind):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fufu-cloud-cli
3
- Version: 0.11.0
3
+ Version: 0.11.1
4
4
  Summary: FUFU Cloud CLI for tenant-scoped mock cloud development and deployment
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  Requires-Python: >=3.10
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
  只供 FUFU mock 環境使用;不會把部署轉送到正式雲端。
30
30
 
31
31
  0.11.0 新增獨占 GPU VM 的租用命令。需由平台啟用並驗證對應實體節點;
32
- 支援的 RTX 3060 為整卡直通至 KVM 客體,可執行 NVIDIA 驅動與 CUDA。
32
+ 支援的 RTX 3060 以專用 GPU 提供給 VM,可執行 NVIDIA 驅動與 CUDA。
33
33
  停止 VM 仍保留整卡,刪除後才釋放。GPU 使用中或已保留會明確拒絕,
34
34
  不會自動中斷其他工作。CLI 不包含節點 SSH 金鑰、主機裝置管理程式或平台設定。
35
35
 
@@ -54,8 +54,8 @@ S3 bucket tags。需配套 FUFU API;不支援 bucket versioning、retention、
54
54
  KMS、bucket IAM、GCS bucket labels 或 force destroy。
55
55
 
56
56
  0.10.0 新增 Compute Engine/EC2 VM 與 GKE/EKS 介面的實際運算命令。
57
- 需要啟用相應 infrastructure backend 的 FUFU 服務端;VM 使用 KVM/KubeVirt,
58
- 叢集使用獨立 Kubernetes API 與共用節點,均不是官方雲端資源。
57
+ 需要啟用相應功能的 FUFU 服務端;提供實際 VM 與獨立 Kubernetes API,
58
+ 叢集使用共用運算資源,均不是官方雲端資源。
59
59
  支援 VM 建立、SSH 指令、停止/啟動與刪除,以及叢集建立、查詢、
60
60
  get-credentials/update-kubeconfig、waiter 與刪除。
61
61
  取得憑證後可使用標準 kubectl 部署 Deployment、Service、Job 及受管 GPU 容器。
@@ -145,7 +145,7 @@ BigQuery 是 tenant emulator 的 GoogleSQL 子集,無 DML/DDL、load/export
145
145
 
146
146
  0.9.4 新增 GCS generation/metageneration 條件、`storage objects describe/update/list`、8 KiB 自訂 metadata 與二進位 `cat`。競爭寫入、過期條件、CLI metadata 和官方 gcloud 輸出欄位已對照驗收;不相符條件回傳 `PRECONDITION_FAILED`/HTTP 412。新功能需要同步更新 FUFU Console、GCS 儲存映像和 Cloud Shell。儲存升級前須停寫並備份完整 volume;新 metadata 格式可讀舊資料,回滾須還原升級前備份。
147
147
 
148
- 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離 Docker 驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
148
+ 0.9.3 的常用輸出投影、清單篩選/排序/limit、Cloud Run 設定更新、Service Account 啟停及 Pub/Sub attributes/ACK deadline 持續保留。僅明列子集經過官方 gcloud、小用量真實 GCP 與隔離環境驗收;不表示完整 Google IAM、SDK/ADC 或自動擴縮相容。
149
149
 
150
150
  0.9.1 統一所有 CLI API 請求的 `User-Agent: fufu-cloud-cli`,涵蓋物件傳輸、
151
151
  Cloudflare 靜態檔案部署、IaC 遠端 state 與 Cloud Shell session,避免沿用
@@ -1,8 +0,0 @@
1
- """管理者配置的 API gateway;容器標籤只能由受信任的宿主控制器設定。"""
2
-
3
-
4
- def api_gateway_labels(labels):
5
- if not isinstance(labels, dict):
6
- return False
7
- return labels.get('com.docker.compose.service') == 'local-cloud-console' or \
8
- labels.get('io.fufu.platform-bridge') == 'console-rke2-v1'
File without changes