yicloud-sdk-python 0.4.0__tar.gz → 0.4.2__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 (89) hide show
  1. {yicloud_sdk_python-0.4.0/yicloud_sdk_python.egg-info → yicloud_sdk_python-0.4.2}/PKG-INFO +1 -1
  2. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/pyproject.toml +1 -1
  3. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/version.py +1 -1
  4. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/__init__.py +1 -1
  5. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/job/__init__.py +3 -0
  6. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/job/actions.py +32 -4
  7. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/job/models.py +20 -5
  8. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/sandbox/__init__.py +30 -0
  9. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/sandbox/actions.py +122 -2
  10. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/sandbox/models.py +150 -0
  11. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/workspace/actions.py +12 -8
  12. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/workspace/models.py +2 -0
  13. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2/yicloud_sdk_python.egg-info}/PKG-INFO +1 -1
  14. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/LICENSE +0 -0
  15. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/README.md +0 -0
  16. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/setup.cfg +0 -0
  17. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/__init__.py +0 -0
  18. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/auth/__init__.py +0 -0
  19. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/auth/credential.py +0 -0
  20. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/auth/sign.py +0 -0
  21. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/client.py +0 -0
  22. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/config.py +0 -0
  23. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/errs/__init__.py +0 -0
  24. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/log/__init__.py +0 -0
  25. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/log/logger.py +0 -0
  26. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/log/std.py +0 -0
  27. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/msgs/__init__.py +0 -0
  28. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/utils/__init__.py +0 -0
  29. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/utils/helps.py +0 -0
  30. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/utils/retry/__init__.py +0 -0
  31. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/base/utils/retry/retry.py +0 -0
  32. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/__init__.py +0 -0
  33. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/bc/__init__.py +0 -0
  34. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/bc/actions.py +0 -0
  35. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/bc/client.py +0 -0
  36. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/bc/models.py +0 -0
  37. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/dataset/__init__.py +0 -0
  38. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/dataset/actions.py +0 -0
  39. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/dataset/client.py +0 -0
  40. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/dataset/models.py +0 -0
  41. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/fs/__init__.py +0 -0
  42. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/fs/actions.py +0 -0
  43. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/fs/client.py +0 -0
  44. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/fs/models.py +0 -0
  45. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/iam/__init__.py +0 -0
  46. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/iam/actions.py +0 -0
  47. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/iam/client.py +0 -0
  48. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/iam/models.py +0 -0
  49. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/inferset/__init__.py +0 -0
  50. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/inferset/actions.py +0 -0
  51. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/inferset/client.py +0 -0
  52. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/inferset/models.py +0 -0
  53. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/job/client.py +0 -0
  54. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/mc/__init__.py +0 -0
  55. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/mc/actions.py +0 -0
  56. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/mc/client.py +0 -0
  57. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/mc/models.py +0 -0
  58. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/modelrepo/__init__.py +0 -0
  59. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/modelrepo/actions.py +0 -0
  60. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/modelrepo/client.py +0 -0
  61. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/modelrepo/models.py +0 -0
  62. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/monitor/__init__.py +0 -0
  63. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/monitor/actions.py +0 -0
  64. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/monitor/client.py +0 -0
  65. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/monitor/models.py +0 -0
  66. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/oss/__init__.py +0 -0
  67. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/oss/actions.py +0 -0
  68. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/oss/client.py +0 -0
  69. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/oss/models.py +0 -0
  70. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/ray/__init__.py +0 -0
  71. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/ray/actions.py +0 -0
  72. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/ray/client.py +0 -0
  73. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/ray/models.py +0 -0
  74. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/registry/__init__.py +0 -0
  75. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/registry/actions.py +0 -0
  76. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/registry/client.py +0 -0
  77. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/registry/models.py +0 -0
  78. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/sandbox/client.py +0 -0
  79. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/volume/__init__.py +0 -0
  80. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/volume/actions.py +0 -0
  81. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/volume/client.py +0 -0
  82. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/volume/models.py +0 -0
  83. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/workspace/__init__.py +0 -0
  84. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud/services/workspace/client.py +0 -0
  85. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud_sdk_python.egg-info/SOURCES.txt +0 -0
  86. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud_sdk_python.egg-info/dependency_links.txt +0 -0
  87. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud_sdk_python.egg-info/not-zip-safe +0 -0
  88. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud_sdk_python.egg-info/requires.txt +0 -0
  89. {yicloud_sdk_python-0.4.0 → yicloud_sdk_python-0.4.2}/yicloud_sdk_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yicloud-sdk-python
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: YiCloud OpenAPI SDK for Python
5
5
  Author: YiCloud
6
6
  Project-URL: Homepage, https://gitee.com/yicloud-team/openapi-sdk-python
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "yicloud-sdk-python"
7
- version = "0.4.0"
7
+ version = "0.4.2"
8
8
  description = "YiCloud OpenAPI SDK for Python"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -1,4 +1,4 @@
1
- __version__ = "0.4.0"
1
+ __version__ = "0.4.2"
2
2
 
3
3
 
4
4
  def Version() -> str:
@@ -4,4 +4,4 @@ YiCloud Python SDK
4
4
  A Python SDK for the YiCloud OpenAPI service.
5
5
  """
6
6
 
7
- __version__ = "0.4.0"
7
+ __version__ = "0.4.2"
@@ -12,6 +12,7 @@ from .actions import (
12
12
  edit_job,
13
13
  batch_delete_jobs,
14
14
  batch_stop_jobs,
15
+ stop_job,
15
16
  stop_replica,
16
17
  get_logs,
17
18
  get_logs_volume,
@@ -25,6 +26,7 @@ from .actions import (
25
26
  edit_job_async,
26
27
  batch_delete_jobs_async,
27
28
  batch_stop_jobs_async,
29
+ stop_job_async,
28
30
  stop_replica_async,
29
31
  get_logs_async,
30
32
  get_logs_volume_async,
@@ -75,6 +77,7 @@ from .models import (
75
77
  S3Config,
76
78
  CreateJobReqS3Config,
77
79
  CreateJobReqSelfHealConfig,
80
+ StopJobReq,
78
81
  StopReplicaReq,
79
82
  CreateJobReqTaskSpec,
80
83
  TaskSpecResponse,
@@ -109,7 +109,7 @@ JobUid 可从 ListJobs / GetJob 接口返回的 Uid 字段获取。
109
109
 
110
110
  def create_job(ctx: Optional[dict], req: models.CreateJobReq) -> models.CreateJobData:
111
111
  """创建 Job
112
- 创建新的训练任务,支持配置自愈选项、多任务规格和调度策略
112
+ 创建新的训练任务,支持配置自愈选项、多任务规格和调度策略。创建前会校验租户状态与 SKU 余额,可能返回 1001012、1001013、1001014。
113
113
  POST /job/v1alpha1/CreateJob
114
114
  Action: CreateJob
115
115
 
@@ -124,7 +124,7 @@ def create_job(ctx: Optional[dict], req: models.CreateJobReq) -> models.CreateJo
124
124
 
125
125
  async def create_job_async(ctx: Optional[dict], req: models.CreateJobReq) -> models.CreateJobData:
126
126
  """创建 Job(异步)
127
- 创建新的训练任务,支持配置自愈选项、多任务规格和调度策略
127
+ 创建新的训练任务,支持配置自愈选项、多任务规格和调度策略。创建前会校验租户状态与 SKU 余额,可能返回 1001012、1001013、1001014。
128
128
  POST /job/v1alpha1/CreateJob
129
129
  Action: CreateJob
130
130
 
@@ -223,6 +223,34 @@ async def batch_stop_jobs_async(ctx: Optional[dict], req: models.BatchStopJobsRe
223
223
  return rsp.get_typed_data()
224
224
 
225
225
 
226
+ def stop_job(ctx: Optional[dict], req: models.StopJobReq):
227
+ """停止 Job
228
+ 停止运行中的 Job
229
+ POST /job/v1alpha1/StopJob
230
+ Action: StopJob
231
+
232
+
233
+ Raises YiCloudException on error.
234
+ """
235
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/StopJob"
236
+ rsp = msgs.Rsp[None].empty()
237
+ client.base.post(ctx, path, {k: v for k, v in req.__dict__.items() if v is not None}, rsp)
238
+
239
+
240
+ async def stop_job_async(ctx: Optional[dict], req: models.StopJobReq):
241
+ """停止 Job(异步)
242
+ 停止运行中的 Job
243
+ POST /job/v1alpha1/StopJob
244
+ Action: StopJob
245
+
246
+
247
+ Raises YiCloudException on error.
248
+ """
249
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/StopJob"
250
+ rsp = msgs.Rsp[None].empty()
251
+ await client.base.post_async(ctx, path, {k: v for k, v in req.__dict__.items() if v is not None}, rsp)
252
+
253
+
226
254
  def stop_replica(ctx: Optional[dict], req: models.StopReplicaReq):
227
255
  """停止单个副本
228
256
  停止指定的 Replica,参考 StopWorkspace 实现模式,通过 apiserver subresource 调用。
@@ -313,7 +341,7 @@ async def get_logs_volume_async(ctx: Optional[dict], req: models.GetLogsVolumeRe
313
341
 
314
342
  def list_job_replicas(ctx: Optional[dict], req: models.ListJobReplicasReq) -> models.ListJobReplicasData:
315
343
  """获取副本列表
316
- 获取指定 Job 的所有副本列表
344
+ 获取指定 Job 的副本列表,支持按副本状态过滤
317
345
  GET /job/v1alpha1/ListJobReplicas
318
346
  Action: ListJobReplicas
319
347
 
@@ -328,7 +356,7 @@ def list_job_replicas(ctx: Optional[dict], req: models.ListJobReplicasReq) -> mo
328
356
 
329
357
  async def list_job_replicas_async(ctx: Optional[dict], req: models.ListJobReplicasReq) -> models.ListJobReplicasData:
330
358
  """获取副本列表(异步)
331
- 获取指定 Job 的所有副本列表
359
+ 获取指定 Job 的副本列表,支持按副本状态过滤
332
360
  GET /job/v1alpha1/ListJobReplicas
333
361
  Action: ListJobReplicas
334
362
 
@@ -90,6 +90,7 @@ class CreateJobReq:
90
90
  Name: str # Job 显示名称 json:"Name"
91
91
  Project: str # 项目名称 json:"Project"
92
92
  TaskSpecs: Dict[str, CreateJobReqTaskSpec] # 任务规格映射,key 为任务名(如 t0),value 为任务规格 json:"TaskSpecs"
93
+ ZoneId: str # 可用区(AZ),必填;RegionId 由网关通过 X-OGW-REGION-ID 请求头注入 json:"ZoneId"
93
94
  AutoDeleteDuration: Optional[str] = None # 自动删除时间,如 24h json:"AutoDeleteDuration,omitempty"
94
95
  BackoffLimit: Optional[int] = None # 重试次数限制 json:"BackoffLimit,omitempty"
95
96
  Creator: Optional[str] = None # 创建者用户名 json:"Creator,omitempty"
@@ -168,6 +169,7 @@ class GetJobData:
168
169
  Rank: Optional[int] = 0 # 排序排名(从 1 开始),仅 List 接口返回 json:"Rank,omitempty"
169
170
  RealCreator: Optional[str] = "" # 实际创建者用户名(共享场景下与 Creator 不同) json:"RealCreator,omitempty"
170
171
  RealCreatorId: Optional[str] = "" # 实际创建者用户 ID(共享场景下与 CreatorId 不同) json:"RealCreatorId,omitempty"
172
+ RegionId: Optional[str] = "" # 地域,从 RJob topology labels 读取;存量数据缺失时回填默认值 cn-shanghai json:"RegionId,omitempty"
171
173
  S3Config: Optional[S3Config] = None # json:"S3Config,omitempty"
172
174
  SKUPrivate: Optional[bool] = False # 是否使用私有机器 SKU json:"SKUPrivate,omitempty"
173
175
  SKUPrivateProject: Optional[bool] = False # 是否为项目级私有 SKU json:"SKUPrivateProject,omitempty"
@@ -187,6 +189,7 @@ class GetJobData:
187
189
  Uid: Optional[str] = "" # Job 唯一标识(UID) json:"Uid,omitempty"
188
190
  UsePrivateMachine: Optional[bool] = False # 是否使用私有机器 json:"UsePrivateMachine,omitempty"
189
191
  WaitTime: Optional[int] = 0 # 等待时间(秒),仅 List 接口返回 json:"WaitTime,omitempty"
192
+ ZoneId: Optional[str] = "" # 可用区,从 RJob topology labels 读取;存量数据缺失时回填默认值 cn-shanghai-b json:"ZoneId,omitempty"
190
193
 
191
194
  @dataclass
192
195
  class LogEntry:
@@ -269,8 +272,10 @@ class GetJobReplicaData:
269
272
  NodeName: Optional[str] = "" # 运行节点名称 json:"NodeName,omitempty"
270
273
  Phase: Optional[str] = None # SDK常量: PhasePending, PhaseStarting, PhaseRunning, PhaseScanning, PhaseSucceeded, PhaseFailed, PhaseRestarting, PhaseStopped, PhaseInqueue, PhaseSelfHealTriggered, PhaseSelfHealRunning, PhaseSelfHealSucceeded, PhaseSelfHealFailed json:"Phase,omitempty"
271
274
  PodIP: Optional[str] = "" # Pod IP 地址 json:"PodIP,omitempty"
272
- ReplicaIndex: Optional[int] = 0 # 副本序号 json:"ReplicaIndex,omitempty"
275
+ RegionId: Optional[str] = "" # 地域,从 Replica topology labels 读取;存量数据缺失时回填默认值 cn-shanghai json:"RegionId,omitempty"
276
+ ReplicaIndex: Optional[str] = "" # 副本序号 json:"ReplicaIndex,omitempty"
273
277
  TaskType: Optional[str] = "" # 副本任务类型(如 worker) json:"TaskType,omitempty"
278
+ ZoneId: Optional[str] = "" # 可用区,从 Replica topology labels 读取;存量数据缺失时回填默认值 cn-shanghai-b json:"ZoneId,omitempty"
274
279
 
275
280
  @dataclass
276
281
  class BatchDeleteJobsReqResourceIdentifier:
@@ -312,13 +317,19 @@ class CreateJobReqS3Config:
312
317
 
313
318
  @dataclass
314
319
  class CreateJobReqSelfHealConfig:
315
- AutoReplaceNode: Optional[bool] = None # 是否开启节点自愈(故障节点自动替换) json:"AutoReplaceNode,omitempty"
316
- GracePeriodMinutes: Optional[int] = None # 介入等待时间(分钟),故障发生后等待多久开始自愈 json:"GracePeriodMinutes,omitempty"
317
- LimitCount: Optional[int] = None # 最大重试次数 json:"LimitCount,omitempty"
320
+ AutoReplaceNode: Optional[bool] = None # 是否开启节点自愈(故障节点自动替换),默认关闭 json:"AutoReplaceNode,omitempty"
321
+ GracePeriodMinutes: Optional[int] = None # 介入等待时间(分钟),默认 15 分钟 json:"GracePeriodMinutes,omitempty"
322
+ LimitCount: Optional[int] = None # 最大重试次数,默认 5 次 json:"LimitCount,omitempty"
318
323
  NotifyWebhook: Optional[str] = None # 自愈事件通知 Webhook URL(如飞书机器人) json:"NotifyWebhook,omitempty"
319
324
  RetryScope: Optional[str] = None # SDK常量: RetryScopeRjob, RetryScopeTask json:"RetryScope,omitempty"
320
325
  SelfHealEnabled: Optional[bool] = None # 是否开启自愈 json:"SelfHealEnabled,omitempty"
321
- TerminationGracePeriodSeconds: Optional[int] = None # 优雅终止等待时间(秒),自愈重启前等待任务退出的时间 json:"TerminationGracePeriodSeconds,omitempty"
326
+ TerminationGracePeriodSeconds: Optional[int] = None # 数据回收时间(秒),默认 300 秒 json:"TerminationGracePeriodSeconds,omitempty"
327
+
328
+ @dataclass
329
+ class StopJobReq:
330
+ JobId: str # Job 唯一标识 json:"JobId"
331
+ Project: str # 项目名称 json:"Project"
332
+ ZoneId: Optional[str] = None # 可用区(可选,当前服务端仅接收);RegionId 由网关通过 X-OGW-REGION-ID 请求头注入 json:"ZoneId,omitempty"
322
333
 
323
334
  @dataclass
324
335
  class StopReplicaReq:
@@ -367,11 +378,13 @@ class TaskSpecResponse:
367
378
  MountGpfsVolumes: Optional[List[MountGpfsVolume]] = None # GPFS 挂载卷列表(结构化),由 MountGPFS 字符串解析而来 json:"MountGpfsVolumes,omitempty"
368
379
  NegativeTags: Optional[List[str]] = None # 节点反亲和标签列表 json:"NegativeTags,omitempty"
369
380
  PositiveTags: Optional[List[str]] = None # 节点亲和标签列表 json:"PositiveTags,omitempty"
381
+ RegionId: Optional[str] = "" # 地域,从 TaskSpec template labels 读取;缺失时回填默认值 cn-shanghai json:"RegionId,omitempty"
370
382
  Replicas: Optional[int] = 0 # 副本数 json:"Replicas,omitempty"
371
383
  RootfsSource: Optional[RootfsSourceResponse] = None # Rootfs 数据源配置 json:"RootfsSource,omitempty"
372
384
  SKUId: Optional[str] = "" # SKU 规格标识,如 ai.c3m42.r1ir5 json:"SKUId,omitempty"
373
385
  UpdatePolicy: Optional[str] = None # SDK常量: UpdatePolicyActive, UpdatePolicyBeforeRunning, UpdatePolicyNone json:"UpdatePolicy,omitempty"
374
386
  Volumes: Optional[List[VolumeMount]] = None # 挂载存储卷列表 json:"Volumes,omitempty"
387
+ ZoneId: Optional[str] = "" # 可用区,从 TaskSpec template labels 读取;缺失时回填默认值 cn-shanghai-b json:"ZoneId,omitempty"
375
388
 
376
389
  @dataclass
377
390
  class TaskStatusCount:
@@ -445,10 +458,12 @@ class GetPrecheckStatusReq:
445
458
  class ListJobReplicasReq:
446
459
  JobId: str # Job 唯一标识 query:"JobId"
447
460
  Project: str # 项目名称 query:"Project"
461
+ Phases: Optional[str] = None # 按副本状态过滤,多个状态使用逗号分隔;可选值为 Pending、Starting、Running、Stopped、Succeeded、Failed、Unknown query:"Phases,omitempty"
448
462
 
449
463
  @dataclass
450
464
  class ListJobsReq:
451
465
  Project: str # 项目名称 query:"Project"
466
+ ZoneId: str # 可用区(AZ)过滤,如 cn-shanghai-b;RegionId 由网关通过 X-OGW-REGION-ID 请求头注入 query:"ZoneId"
452
467
  Creators: Optional[str] = None # 创建者用户名,逗号分隔 query:"Creators,omitempty"
453
468
  JobIds: Optional[str] = None # Job ID 列表,逗号分隔 query:"JobIds,omitempty"
454
469
  JobNames: Optional[str] = None # Job 名称过滤(逗号分隔,支持模糊匹配) query:"JobNames,omitempty"
@@ -14,7 +14,11 @@ from .actions import (
14
14
  get_prewarm_pool,
15
15
  get_resource_stats,
16
16
  get_sandbox,
17
+ get_sandbox_egress_policy,
17
18
  get_sandbox_environment,
19
+ get_sandbox_logs_query_range,
20
+ get_sandbox_logs_volume_range,
21
+ list_environment_events,
18
22
  list_prewarm_pool_events,
19
23
  list_prewarm_pool_pods,
20
24
  list_sandbox_environments,
@@ -33,7 +37,11 @@ from .actions import (
33
37
  get_prewarm_pool_async,
34
38
  get_resource_stats_async,
35
39
  get_sandbox_async,
40
+ get_sandbox_egress_policy_async,
36
41
  get_sandbox_environment_async,
42
+ get_sandbox_logs_query_range_async,
43
+ get_sandbox_logs_volume_range_async,
44
+ list_environment_events_async,
37
45
  list_prewarm_pool_events_async,
38
46
  list_prewarm_pool_pods_async,
39
47
  list_sandbox_environments_async,
@@ -47,8 +55,10 @@ from .actions import (
47
55
 
48
56
  # Re-export models
49
57
  from .models import (
58
+ Action,
50
59
  ActualMode,
51
60
  AllocationMode,
61
+ DefaultAction,
52
62
  Kind,
53
63
  Level,
54
64
  Mode,
@@ -64,6 +74,9 @@ from .models import (
64
74
  CreateSandboxData,
65
75
  CreateSandboxEnvironmentReq,
66
76
  CreateSandboxReq,
77
+ EgressAlwaysRules,
78
+ EgressLogSkipRule,
79
+ EnvironmentEvent,
67
80
  EnvironmentInstanceCounts,
68
81
  EnvironmentResourceUsage,
69
82
  Image,
@@ -73,12 +86,18 @@ from .models import (
73
86
  CreateSandboxReqImageInput,
74
87
  CreateSandboxEnvironmentReqImageInput,
75
88
  GetInstanceStateStatsData,
89
+ ListEnvironmentEventsData,
76
90
  ListPrewarmPoolEventsData,
77
91
  ListPrewarmPoolPodsData,
78
92
  ListSandboxEnvironmentsData,
79
93
  ListSandboxProjectsData,
80
94
  ListSandboxesData,
81
95
  ModeInstanceStateCluster,
96
+ NetworkPolicy,
97
+ CreateSandboxReqNetworkPolicy,
98
+ NetworkRule,
99
+ CreateSandboxReqNetworkRule,
100
+ NodeCapacitySummary,
82
101
  Port,
83
102
  CreateSandboxReqPort,
84
103
  CreateSandboxEnvironmentReqPort,
@@ -90,6 +109,7 @@ from .models import (
90
109
  Resources,
91
110
  CreateSandboxReqResources,
92
111
  CreateSandboxEnvironmentReqResources,
112
+ GetSandboxEgressPolicyData,
93
113
  SandboxEndpointInfo,
94
114
  SandboxEndpoints,
95
115
  DeleteSandboxEnvironmentReq,
@@ -97,6 +117,12 @@ from .models import (
97
117
  DeleteSandboxReq,
98
118
  StopSandboxReq,
99
119
  GetSandboxData,
120
+ SandboxLogEntry,
121
+ SandboxLogVolumeDataPoint,
122
+ SandboxLogVolumeMetadata,
123
+ SandboxLogVolumeResult,
124
+ GetSandboxLogsQueryRangeData,
125
+ GetSandboxLogsVolumeRangeData,
100
126
  StateStatus,
101
127
  UpdateInstanceCapacityReq,
102
128
  UpdatePrewarmSizeReq,
@@ -118,7 +144,11 @@ from .models import (
118
144
  GetPrewarmPoolReq,
119
145
  GetResourceStatsReq,
120
146
  GetSandboxReq,
147
+ GetSandboxEgressPolicyReq,
121
148
  GetSandboxEnvironmentReq,
149
+ GetSandboxLogsQueryRangeReq,
150
+ GetSandboxLogsVolumeRangeReq,
151
+ ListEnvironmentEventsReq,
122
152
  ListPrewarmPoolEventsReq,
123
153
  ListPrewarmPoolPodsReq,
124
154
  ListSandboxEnvironmentsReq,
@@ -217,7 +217,7 @@ async def get_prewarm_pool_async(ctx: Optional[dict], req: models.GetPrewarmPool
217
217
 
218
218
  def get_resource_stats(ctx: Optional[dict], req: models.GetResourceStatsReq) -> models.GetResourceStatsData:
219
219
  """资源统计
220
- 查询指定沙盒环境下沙盒实例使用的 CPU 和内存资源。
220
+ 查询指定沙盒环境的 CPU、内存用量,并返回集群沙盒节点池的总量、已用量和真实可调度剩余容量。旧版后端未提供节点容量时不返回 Node。
221
221
  GET /sandbox/v1alpha1/GetResourceStats
222
222
  Action: GetResourceStats
223
223
 
@@ -232,7 +232,7 @@ def get_resource_stats(ctx: Optional[dict], req: models.GetResourceStatsReq) ->
232
232
 
233
233
  async def get_resource_stats_async(ctx: Optional[dict], req: models.GetResourceStatsReq) -> models.GetResourceStatsData:
234
234
  """资源统计(异步)
235
- 查询指定沙盒环境下沙盒实例使用的 CPU 和内存资源。
235
+ 查询指定沙盒环境的 CPU、内存用量,并返回集群沙盒节点池的总量、已用量和真实可调度剩余容量。旧版后端未提供节点容量时不返回 Node。
236
236
  GET /sandbox/v1alpha1/GetResourceStats
237
237
  Action: GetResourceStats
238
238
 
@@ -275,6 +275,36 @@ async def get_sandbox_async(ctx: Optional[dict], req: models.GetSandboxReq) -> m
275
275
  return rsp.get_typed_data()
276
276
 
277
277
 
278
+ def get_sandbox_egress_policy(ctx: Optional[dict], req: models.GetSandboxEgressPolicyReq) -> models.GetSandboxEgressPolicyData:
279
+ """实例出站策略
280
+ 查询已启用 egress 的实例当前策略及平台规则;实例未启用 egress 或 sidecar 不可用时返回上游错误。
281
+ GET /sandbox/v1alpha1/GetSandboxEgressPolicy
282
+ Action: GetSandboxEgressPolicy
283
+
284
+ Returns GetSandboxEgressPolicyData on success.
285
+ Raises YiCloudException on error.
286
+ """
287
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxEgressPolicy"
288
+ rsp = msgs.Rsp[models.GetSandboxEgressPolicyData]()
289
+ client.base.get(ctx, path, req, rsp)
290
+ return rsp.get_typed_data()
291
+
292
+
293
+ async def get_sandbox_egress_policy_async(ctx: Optional[dict], req: models.GetSandboxEgressPolicyReq) -> models.GetSandboxEgressPolicyData:
294
+ """实例出站策略(异步)
295
+ 查询已启用 egress 的实例当前策略及平台规则;实例未启用 egress 或 sidecar 不可用时返回上游错误。
296
+ GET /sandbox/v1alpha1/GetSandboxEgressPolicy
297
+ Action: GetSandboxEgressPolicy
298
+
299
+ Returns GetSandboxEgressPolicyData on success.
300
+ Raises YiCloudException on error.
301
+ """
302
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxEgressPolicy"
303
+ rsp = msgs.Rsp[models.GetSandboxEgressPolicyData]()
304
+ await client.base.get_async(ctx, path, req, rsp)
305
+ return rsp.get_typed_data()
306
+
307
+
278
308
  def get_sandbox_environment(ctx: Optional[dict], req: models.GetSandboxEnvironmentReq) -> models.GetSandboxEnvironmentData:
279
309
  """环境详情
280
310
  查询单个沙盒环境详情。
@@ -305,6 +335,96 @@ async def get_sandbox_environment_async(ctx: Optional[dict], req: models.GetSand
305
335
  return rsp.get_typed_data()
306
336
 
307
337
 
338
+ def get_sandbox_logs_query_range(ctx: Optional[dict], req: models.GetSandboxLogsQueryRangeReq) -> models.GetSandboxLogsQueryRangeData:
339
+ """实例日志
340
+ 查询指定沙盒实例的 Loki 日志;StartTime 和 EndTime 使用 Unix 秒整数,查询区间为 [StartTime, EndTime)。
341
+ GET /sandbox/v1alpha1/GetSandboxLogsQueryRange
342
+ Action: GetSandboxLogsQueryRange
343
+
344
+ Returns GetSandboxLogsQueryRangeData on success.
345
+ Raises YiCloudException on error.
346
+ """
347
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxLogsQueryRange"
348
+ rsp = msgs.Rsp[models.GetSandboxLogsQueryRangeData]()
349
+ client.base.get(ctx, path, req, rsp)
350
+ return rsp.get_typed_data()
351
+
352
+
353
+ async def get_sandbox_logs_query_range_async(ctx: Optional[dict], req: models.GetSandboxLogsQueryRangeReq) -> models.GetSandboxLogsQueryRangeData:
354
+ """实例日志(异步)
355
+ 查询指定沙盒实例的 Loki 日志;StartTime 和 EndTime 使用 Unix 秒整数,查询区间为 [StartTime, EndTime)。
356
+ GET /sandbox/v1alpha1/GetSandboxLogsQueryRange
357
+ Action: GetSandboxLogsQueryRange
358
+
359
+ Returns GetSandboxLogsQueryRangeData on success.
360
+ Raises YiCloudException on error.
361
+ """
362
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxLogsQueryRange"
363
+ rsp = msgs.Rsp[models.GetSandboxLogsQueryRangeData]()
364
+ await client.base.get_async(ctx, path, req, rsp)
365
+ return rsp.get_typed_data()
366
+
367
+
368
+ def get_sandbox_logs_volume_range(ctx: Optional[dict], req: models.GetSandboxLogsVolumeRangeReq) -> models.GetSandboxLogsVolumeRangeData:
369
+ """实例日志量
370
+ 查询指定沙盒实例的日志量时序分布;StartTime 和 EndTime 使用 Unix 秒整数,查询区间为 [StartTime, EndTime)。
371
+ GET /sandbox/v1alpha1/GetSandboxLogsVolumeRange
372
+ Action: GetSandboxLogsVolumeRange
373
+
374
+ Returns GetSandboxLogsVolumeRangeData on success.
375
+ Raises YiCloudException on error.
376
+ """
377
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxLogsVolumeRange"
378
+ rsp = msgs.Rsp[models.GetSandboxLogsVolumeRangeData]()
379
+ client.base.get(ctx, path, req, rsp)
380
+ return rsp.get_typed_data()
381
+
382
+
383
+ async def get_sandbox_logs_volume_range_async(ctx: Optional[dict], req: models.GetSandboxLogsVolumeRangeReq) -> models.GetSandboxLogsVolumeRangeData:
384
+ """实例日志量(异步)
385
+ 查询指定沙盒实例的日志量时序分布;StartTime 和 EndTime 使用 Unix 秒整数,查询区间为 [StartTime, EndTime)。
386
+ GET /sandbox/v1alpha1/GetSandboxLogsVolumeRange
387
+ Action: GetSandboxLogsVolumeRange
388
+
389
+ Returns GetSandboxLogsVolumeRangeData on success.
390
+ Raises YiCloudException on error.
391
+ """
392
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/GetSandboxLogsVolumeRange"
393
+ rsp = msgs.Rsp[models.GetSandboxLogsVolumeRangeData]()
394
+ await client.base.get_async(ctx, path, req, rsp)
395
+ return rsp.get_typed_data()
396
+
397
+
398
+ def list_environment_events(ctx: Optional[dict], req: models.ListEnvironmentEventsReq) -> models.ListEnvironmentEventsData:
399
+ """环境事件
400
+ 查询指定沙盒环境关联的实时 Kubernetes 事件;该接口不替代预热池历史事件查询。
401
+ GET /sandbox/v1alpha1/ListEnvironmentEvents
402
+ Action: ListEnvironmentEvents
403
+
404
+ Returns ListEnvironmentEventsData on success.
405
+ Raises YiCloudException on error.
406
+ """
407
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/ListEnvironmentEvents"
408
+ rsp = msgs.Rsp[models.ListEnvironmentEventsData]()
409
+ client.base.get(ctx, path, req, rsp)
410
+ return rsp.get_typed_data()
411
+
412
+
413
+ async def list_environment_events_async(ctx: Optional[dict], req: models.ListEnvironmentEventsReq) -> models.ListEnvironmentEventsData:
414
+ """环境事件(异步)
415
+ 查询指定沙盒环境关联的实时 Kubernetes 事件;该接口不替代预热池历史事件查询。
416
+ GET /sandbox/v1alpha1/ListEnvironmentEvents
417
+ Action: ListEnvironmentEvents
418
+
419
+ Returns ListEnvironmentEventsData on success.
420
+ Raises YiCloudException on error.
421
+ """
422
+ path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/ListEnvironmentEvents"
423
+ rsp = msgs.Rsp[models.ListEnvironmentEventsData]()
424
+ await client.base.get_async(ctx, path, req, rsp)
425
+ return rsp.get_typed_data()
426
+
427
+
308
428
  def list_prewarm_pool_events(ctx: Optional[dict], req: models.ListPrewarmPoolEventsReq) -> models.ListPrewarmPoolEventsData:
309
429
  """预热事件
310
430
  查询指定沙盒环境的预热池事件历史。
@@ -4,6 +4,11 @@ from __future__ import annotations
4
4
  from dataclasses import dataclass, field
5
5
  from typing import Optional, List, Dict
6
6
 
7
+ # Action 枚举值
8
+ class Action:
9
+ ActionAllow = "allow"
10
+ ActionDeny = "deny"
11
+
7
12
  # ActualMode 枚举值
8
13
  class ActualMode:
9
14
  ActualModePool = "pool"
@@ -14,6 +19,11 @@ class AllocationMode:
14
19
  AllocationModePrewarm = "prewarm"
15
20
  AllocationModeManual = "manual"
16
21
 
22
+ # DefaultAction 枚举值
23
+ class DefaultAction:
24
+ DefaultActionAllow = "allow"
25
+ DefaultActionDeny = "deny"
26
+
17
27
  # Kind 枚举值
18
28
  class Kind:
19
29
  KindPool = "Pool"
@@ -137,11 +147,31 @@ class CreateSandboxReq:
137
147
  Image: Optional[CreateSandboxReqImageInput] = None # Image 直接创建实例时使用的镜像配置;可使用 Uri,也可使用 Ref 并按需指定 Source 由 adapter 解析 registry host;Ref 和 Uri 必须二选一。 json:"Image,omitempty"
138
148
  LifecycleMinutes: Optional[int] = None # LifecycleMinutes 实例生命周期,单位分钟。 json:"LifecycleMinutes,omitempty"
139
149
  Name: Optional[str] = None # Name 沙盒实例名称。 json:"Name,omitempty"
150
+ NetworkPolicy: Optional[CreateSandboxReqNetworkPolicy] = None # NetworkPolicy 实例出站策略;传入(包括空对象)会冷启动,不使用预热实例。省略则不启用。 json:"NetworkPolicy,omitempty"
140
151
  Ports: Optional[List[CreateSandboxReqPort]] = None # Ports 实例端口暴露配置。 json:"Ports,omitempty"
141
152
  RequestTimeoutSeconds: Optional[int] = None # RequestTimeoutSeconds 单次请求超时时间,单位秒。 json:"RequestTimeoutSeconds,omitempty"
142
153
  Resources: Optional[CreateSandboxReqResources] = None # Resources 直接创建实例时使用的资源规格。 json:"Resources,omitempty"
143
154
  Volumes: Optional[List[CreateSandboxReqVolume]] = None # Volumes 实例挂载卷配置。 json:"Volumes,omitempty"
144
155
 
156
+ @dataclass
157
+ class EgressAlwaysRules:
158
+ Allow: Optional[List[NetworkRule]] = None # json:"Allow,omitempty"
159
+ Deny: Optional[List[NetworkRule]] = None # json:"Deny,omitempty"
160
+ LogSkip: Optional[List[EgressLogSkipRule]] = None # json:"LogSkip,omitempty"
161
+
162
+ @dataclass
163
+ class EgressLogSkipRule:
164
+ Target: Optional[str] = "" # json:"Target,omitempty"
165
+
166
+ @dataclass
167
+ class EnvironmentEvent:
168
+ Kind: Optional[str] = "" # Kind 关联 Kubernetes 对象类型。 json:"Kind,omitempty"
169
+ Level: Optional[str] = "" # Level Kubernetes Event 类型。 json:"Level,omitempty"
170
+ Message: Optional[str] = "" # Message 事件详情。 json:"Message,omitempty"
171
+ Name: Optional[str] = "" # Name 关联 Kubernetes 对象名称。 json:"Name,omitempty"
172
+ Reason: Optional[str] = "" # Reason 事件原因。 json:"Reason,omitempty"
173
+ Time: Optional[str] = "" # Time 事件发生时间。 json:"Time,omitempty"
174
+
145
175
  @dataclass
146
176
  class EnvironmentInstanceCounts:
147
177
  Allocated: Optional[int] = 0 # Allocated 已分配实例数。 json:"Allocated,omitempty"
@@ -198,6 +228,13 @@ class GetInstanceStateStatsData:
198
228
  Prewarm: Optional[ModeInstanceStateCluster] = None # Prewarm 预热实例状态统计。 json:"Prewarm,omitempty"
199
229
  UsedPercentage: Optional[int] = 0 # UsedPercentage 容量使用百分比。 json:"UsedPercentage,omitempty"
200
230
 
231
+ @dataclass
232
+ class ListEnvironmentEventsData:
233
+ Items: Optional[List[EnvironmentEvent]] = None # Items 沙盒环境事件列表。 json:"Items,omitempty"
234
+ Limit: Optional[int] = 0 # Limit 本次响应对应的返回条数。 json:"Limit,omitempty"
235
+ Offset: Optional[int] = 0 # Offset 本次响应对应的偏移量。 json:"Offset,omitempty"
236
+ Total: Optional[int] = 0 # Total 符合条件的事件总数。 json:"Total,omitempty"
237
+
201
238
  @dataclass
202
239
  class ListPrewarmPoolEventsData:
203
240
  Items: Optional[List[PrewarmPoolEvent]] = None # Items 预热池事件列表。 json:"Items,omitempty"
@@ -238,6 +275,38 @@ class ModeInstanceStateCluster:
238
275
  Terminating: Optional[int] = 0 # Terminating 终止中的实例数。 json:"Terminating,omitempty"
239
276
  Total: Optional[int] = 0 # Total 当前模式下实例总数。 json:"Total,omitempty"
240
277
 
278
+ @dataclass
279
+ class NetworkPolicy:
280
+ DefaultAction: Optional[str] = None # SDK常量: DefaultActionAllow, DefaultActionDeny json:"DefaultAction,omitempty"
281
+ Egress: Optional[List[NetworkRule]] = None # json:"Egress,omitempty"
282
+
283
+ @dataclass
284
+ class CreateSandboxReqNetworkPolicy:
285
+ DefaultAction: Optional[str] = None # SDK常量: DefaultActionAllow, DefaultActionDeny json:"DefaultAction,omitempty"
286
+ Egress: Optional[List[CreateSandboxReqNetworkRule]] = None # json:"Egress,omitempty"
287
+
288
+ @dataclass
289
+ class NetworkRule:
290
+ Action: str # SDK常量: ActionAllow, ActionDeny json:"Action"
291
+ Target: str # json:"Target"
292
+
293
+ @dataclass
294
+ class CreateSandboxReqNetworkRule:
295
+ Action: str # SDK常量: ActionAllow, ActionDeny json:"Action"
296
+ Target: str # json:"Target"
297
+
298
+ @dataclass
299
+ class NodeCapacitySummary:
300
+ TotalCpuCores: Optional[float] = 0.0 # TotalCpuCores 可调度节点 allocatable CPU 合计,单位核。 json:"TotalCpuCores,omitempty"
301
+ TotalMemGi: Optional[float] = 0.0 # TotalMemGi 可调度节点 allocatable 内存合计,单位 Gi。 json:"TotalMemGi,omitempty"
302
+ TotalPods: Optional[int] = 0 # TotalPods 可调度节点 allocatable Pod 数合计。 json:"TotalPods,omitempty"
303
+ UsableCpuCores: Optional[float] = 0.0 # UsableCpuCores 可调度节点真实剩余 CPU,单位核。 json:"UsableCpuCores,omitempty"
304
+ UsableMemGi: Optional[float] = 0.0 # UsableMemGi 可调度节点真实剩余内存,单位 Gi。 json:"UsableMemGi,omitempty"
305
+ UsablePods: Optional[int] = 0 # UsablePods 可调度节点真实剩余 Pod 数。 json:"UsablePods,omitempty"
306
+ UsedCpuCores: Optional[float] = 0.0 # UsedCpuCores 可调度节点已用 CPU,单位核。 json:"UsedCpuCores,omitempty"
307
+ UsedMemGi: Optional[float] = 0.0 # UsedMemGi 可调度节点已用内存,单位 Gi。 json:"UsedMemGi,omitempty"
308
+ UsedPods: Optional[int] = 0 # UsedPods 可调度节点已用 Pod 数。 json:"UsedPods,omitempty"
309
+
241
310
  @dataclass
242
311
  class Port:
243
312
  ContainerPort: int # ContainerPort 容器内端口。 json:"ContainerPort"
@@ -299,6 +368,7 @@ class GetResourceStatsData:
299
368
  CpuUsedCores: Optional[float] = 0.0 # CpuUsedCores 已使用 CPU 核数。 json:"CpuUsedCores,omitempty"
300
369
  MemoryQuotaGi: Optional[float] = 0.0 # MemoryQuotaGi 内存配额,单位 Gi。 json:"MemoryQuotaGi,omitempty"
301
370
  MemoryUsedGi: Optional[float] = 0.0 # MemoryUsedGi 已使用内存,单位 Gi。 json:"MemoryUsedGi,omitempty"
371
+ Node: Optional[NodeCapacitySummary] = None # Node 集群沙盒节点池容量;旧版后端未提供该数据时省略。 json:"Node,omitempty"
302
372
 
303
373
  @dataclass
304
374
  class Resources:
@@ -315,6 +385,14 @@ class CreateSandboxEnvironmentReqResources:
315
385
  Cpu: str # Cpu CPU 资源规格,例如 1 或 8。 json:"Cpu"
316
386
  Memory: str # Memory 内存资源规格,例如 2Gi 或 8Gi。 json:"Memory"
317
387
 
388
+ @dataclass
389
+ class GetSandboxEgressPolicyData:
390
+ AlwaysRules: Optional[EgressAlwaysRules] = None # json:"AlwaysRules,omitempty"
391
+ EnforcementMode: Optional[str] = "" # json:"EnforcementMode,omitempty"
392
+ Mode: Optional[str] = "" # json:"Mode,omitempty"
393
+ Policy: Optional[NetworkPolicy] = None # json:"Policy,omitempty"
394
+ Status: Optional[str] = "" # json:"Status,omitempty"
395
+
318
396
  @dataclass
319
397
  class SandboxEndpointInfo:
320
398
  ExternalUrl: Optional[str] = "" # ExternalUrl 外部访问地址,可用性取决于网关和数据面配置。 json:"ExternalUrl,omitempty"
@@ -378,6 +456,7 @@ class GetSandboxData:
378
456
  CreatedAt: Optional[str] = "" # CreatedAt 创建时间,RFC3339 格式。 json:"CreatedAt,omitempty"
379
457
  CreatorId: Optional[str] = "" # CreatorId 创建人 ID。 json:"CreatorId,omitempty"
380
458
  CreatorName: Optional[str] = "" # CreatorName 创建人名称。 json:"CreatorName,omitempty"
459
+ EgressEnabled: Optional[bool] = False # EgressEnabled 是否注入出站管控 sidecar;当前规则通过 GetSandboxEgressPolicy 查询。 json:"EgressEnabled,omitempty"
381
460
  Endpoints: Optional[SandboxEndpoints] = None # Endpoints 沙盒端口访问入口信息。 json:"Endpoints,omitempty"
382
461
  Entrypoint: Optional[List[str]] = None # Entrypoint 实例启动命令。 json:"Entrypoint,omitempty"
383
462
  Env: Optional[Dict[str, str]] = None # Env 实例环境变量。 json:"Env,omitempty"
@@ -401,6 +480,36 @@ class GetSandboxData:
401
480
  Type: Optional[str] = None # SDK常量: TypeCode, TypeBrowser, TypeDesktop, TypeCustom json:"Type,omitempty"
402
481
  Volumes: Optional[List[Volume]] = None # Volumes 实例挂载卷配置。 json:"Volumes,omitempty"
403
482
 
483
+ @dataclass
484
+ class SandboxLogEntry:
485
+ Line: Optional[str] = "" # Line 日志正文。 json:"Line,omitempty"
486
+ Timestamp: Optional[str] = "" # Timestamp 日志时间戳,RFC3339 UTC;按日志实际精度保留小数秒。 json:"Timestamp,omitempty"
487
+
488
+ @dataclass
489
+ class SandboxLogVolumeDataPoint:
490
+ Count: Optional[str] = "" # Count 该时间点的日志量;使用字符串避免数值精度损失。 json:"Count,omitempty"
491
+ Timestamp: Optional[str] = "" # Timestamp 聚合时间点,秒级 RFC3339 UTC。 json:"Timestamp,omitempty"
492
+
493
+ @dataclass
494
+ class SandboxLogVolumeMetadata:
495
+ Step: Optional[int] = 0 # Step 聚合步长,单位秒。 json:"Step,omitempty"
496
+
497
+ @dataclass
498
+ class SandboxLogVolumeResult:
499
+ Metric: Optional[Dict[str, str]] = None # Metric Loki 聚合结果的标签集合。 json:"Metric,omitempty"
500
+ Values: Optional[List[SandboxLogVolumeDataPoint]] = None # Values 日志量时序数据点。 json:"Values,omitempty"
501
+
502
+ @dataclass
503
+ class GetSandboxLogsQueryRangeData:
504
+ Entries: Optional[List[SandboxLogEntry]] = None # Entries 时间范围内的日志记录。 json:"Entries,omitempty"
505
+ SandboxId: Optional[str] = "" # SandboxId 沙盒实例 ID。 json:"SandboxId,omitempty"
506
+
507
+ @dataclass
508
+ class GetSandboxLogsVolumeRangeData:
509
+ Metadata: Optional[SandboxLogVolumeMetadata] = None # Metadata 查询元数据。 json:"Metadata,omitempty"
510
+ Result: Optional[List[SandboxLogVolumeResult]] = None # Result 日志量时序结果。 json:"Result,omitempty"
511
+ SandboxId: Optional[str] = "" # SandboxId 沙盒实例 ID。 json:"SandboxId,omitempty"
512
+
404
513
  @dataclass
405
514
  class StateStatus:
406
515
  LastTransitionAt: Optional[str] = "" # LastTransitionAt 最近一次状态变更时间,RFC3339 格式。 json:"LastTransitionAt,omitempty"
@@ -522,11 +631,52 @@ class GetSandboxReq:
522
631
  ProjectName: str # 项目 namespace query:"ProjectName"
523
632
  SandboxId: str # 沙盒实例 ID query:"SandboxId"
524
633
 
634
+ @dataclass
635
+ class GetSandboxEgressPolicyReq:
636
+ ProjectName: str # 项目 namespace query:"ProjectName"
637
+ SandboxId: str # 沙盒实例 ID query:"SandboxId"
638
+
525
639
  @dataclass
526
640
  class GetSandboxEnvironmentReq:
527
641
  EnvironmentId: str # 沙盒环境 ID query:"EnvironmentId"
528
642
  ProjectName: str # 项目 namespace query:"ProjectName"
529
643
 
644
+ @dataclass
645
+ class GetSandboxLogsQueryRangeReq:
646
+ ProjectName: str # 项目 namespace query:"ProjectName"
647
+ SandboxId: str # 沙盒实例 ID query:"SandboxId"
648
+ StartTime: int # 查询起始时间,Unix 秒整数 query:"StartTime"
649
+ CaseSensitive: Optional[bool] = None # 关键词匹配是否区分大小写 query:"CaseSensitive,omitempty"
650
+ Cluster: Optional[str] = None # Loki 集群标签;不传时使用 brainbox 默认配置 query:"Cluster,omitempty"
651
+ Direction: Optional[str] = None # 查询方向 query:"Direction,omitempty"
652
+ EndTime: Optional[int] = None # 查询结束时间,Unix 秒整数;不传时使用 brainbox 当前时间 query:"EndTime,omitempty"
653
+ Keyword: Optional[str] = None # 日志关键词 query:"Keyword,omitempty"
654
+ Limit: Optional[int] = None # 最大返回条数 query:"Limit,omitempty"
655
+ Regex: Optional[bool] = None # 是否将 Keyword 作为正则表达式 query:"Regex,omitempty"
656
+
657
+ @dataclass
658
+ class GetSandboxLogsVolumeRangeReq:
659
+ ProjectName: str # 项目 namespace query:"ProjectName"
660
+ SandboxId: str # 沙盒实例 ID query:"SandboxId"
661
+ StartTime: int # 查询起始时间,Unix 秒整数 query:"StartTime"
662
+ CaseSensitive: Optional[bool] = None # 关键词匹配是否区分大小写 query:"CaseSensitive,omitempty"
663
+ Cluster: Optional[str] = None # Loki 集群标签;不传时使用 brainbox 默认配置 query:"Cluster,omitempty"
664
+ EndTime: Optional[int] = None # 查询结束时间,Unix 秒整数;不传时使用 brainbox 当前时间 query:"EndTime,omitempty"
665
+ Keyword: Optional[str] = None # 日志关键词 query:"Keyword,omitempty"
666
+ Limit: Optional[int] = None # 最大返回条数 query:"Limit,omitempty"
667
+ Regex: Optional[bool] = None # 是否将 Keyword 作为正则表达式 query:"Regex,omitempty"
668
+ Step: Optional[str] = None # 聚合步长,Go duration 格式;不传时由 brainbox 自动计算 query:"Step,omitempty"
669
+
670
+ @dataclass
671
+ class ListEnvironmentEventsReq:
672
+ EnvironmentId: str # 沙盒环境 ID query:"EnvironmentId"
673
+ ProjectName: str # 项目 namespace query:"ProjectName"
674
+ Kind: Optional[str] = None # Kubernetes 对象类型 query:"Kind,omitempty"
675
+ Level: Optional[str] = None # Kubernetes Event 类型 SDK常量: LevelNormal, LevelWarning query:"Level,omitempty"
676
+ Limit: Optional[int] = None # 返回条数 query:"Limit,omitempty"
677
+ Offset: Optional[int] = None # 偏移量 query:"Offset,omitempty"
678
+ Since: Optional[str] = None # RFC3339 起始时间;不传时使用 brainbox 默认时间窗 query:"Since,omitempty"
679
+
530
680
  @dataclass
531
681
  class ListPrewarmPoolEventsReq:
532
682
  EnvironmentId: str # 沙盒环境 ID query:"EnvironmentId"
@@ -71,7 +71,9 @@ async def get_workspace_async(ctx: Optional[dict], req: models.GetWorkspaceReq)
71
71
 
72
72
  def create_workspace(ctx: Optional[dict], req: models.CreateWorkspaceReq) -> models.CreateWorkspaceData:
73
73
  """创建开发机
74
- 支持两种模式:
74
+ 创建前会校验租户状态与 SKU 余额,可能返回 1006012、1006013、1006014。
75
+
76
+ 支持两种模式:
75
77
  - **配额组模式**(默认):设置 QuotaGroup + RuntimeMode + CPU/Memory/GPU
76
78
  - **SKU 模式**:设置 SkuId + SkuPublic 或 SkuPrivate(及 SkuTenant/SkuProject),不需要设置 RuntimeMode、QuotaGroup、CPU/Memory/GPU
77
79
 
@@ -93,7 +95,9 @@ def create_workspace(ctx: Optional[dict], req: models.CreateWorkspaceReq) -> mod
93
95
 
94
96
  async def create_workspace_async(ctx: Optional[dict], req: models.CreateWorkspaceReq) -> models.CreateWorkspaceData:
95
97
  """创建开发机(异步)
96
- 支持两种模式:
98
+ 创建前会校验租户状态与 SKU 余额,可能返回 1006012、1006013、1006014。
99
+
100
+ 支持两种模式:
97
101
  - **配额组模式**(默认):设置 QuotaGroup + RuntimeMode + CPU/Memory/GPU
98
102
  - **SKU 模式**:设置 SkuId + SkuPublic 或 SkuPrivate(及 SkuTenant/SkuProject),不需要设置 RuntimeMode、QuotaGroup、CPU/Memory/GPU
99
103
 
@@ -143,7 +147,7 @@ async def delete_workspace_async(ctx: Optional[dict], req: models.DeleteWorkspac
143
147
 
144
148
  def start_workspace(ctx: Optional[dict], req: models.StartWorkspaceReq):
145
149
  """启动开发机
146
- 启动已停止的开发机
150
+ 启动已停止的开发机。启动前会校验租户状态与 SKU 余额,可能返回 1006012、1006013、1006014。
147
151
  POST /workspace/v1alpha1/StartWorkspace
148
152
  Action: StartWorkspace
149
153
 
@@ -157,7 +161,7 @@ def start_workspace(ctx: Optional[dict], req: models.StartWorkspaceReq):
157
161
 
158
162
  async def start_workspace_async(ctx: Optional[dict], req: models.StartWorkspaceReq):
159
163
  """启动开发机(异步)
160
- 启动已停止的开发机
164
+ 启动已停止的开发机。启动前会校验租户状态与 SKU 余额,可能返回 1006012、1006013、1006014。
161
165
  POST /workspace/v1alpha1/StartWorkspace
162
166
  Action: StartWorkspace
163
167
 
@@ -416,7 +420,7 @@ def delete_process(ctx: Optional[dict], req: models.DeleteProcessReq):
416
420
  """
417
421
  path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/DeleteProcess"
418
422
  rsp = msgs.Rsp[None].empty()
419
- client.base.post(ctx, path, {k: v for k, v in req.__dict__.items() if v is not None}, rsp)
423
+ client.base.post(ctx, path, req, rsp)
420
424
 
421
425
 
422
426
  async def delete_process_async(ctx: Optional[dict], req: models.DeleteProcessReq):
@@ -430,7 +434,7 @@ async def delete_process_async(ctx: Optional[dict], req: models.DeleteProcessReq
430
434
  """
431
435
  path = f"/{_PRODUCT_CODE}/{_LAST_VERSION}/DeleteProcess"
432
436
  rsp = msgs.Rsp[None].empty()
433
- await client.base.post_async(ctx, path, {k: v for k, v in req.__dict__.items() if v is not None}, rsp)
437
+ await client.base.post_async(ctx, path, req, rsp)
434
438
 
435
439
 
436
440
  def get_process_pids(ctx: Optional[dict], req: models.GetProcessPidsReq) -> models.GetProcessPidsData:
@@ -581,7 +585,7 @@ async def get_release_exclude_patterns_async(ctx: Optional[dict], req: models.Ge
581
585
 
582
586
  def release_process(ctx: Optional[dict], req: models.ReleaseProcessReq):
583
587
  """制作镜像
584
- 将指定进程的当前环境制作为容器镜像
588
+ 将指定进程的当前环境制作为容器镜像。操作者用户 ID 从请求头 X-Kb-Subject 获取(网关鉴权后注入,必填),用于记录提交镜像的操作者信息,缺失时返回参数错误
585
589
  POST /workspace/v1alpha1/ReleaseProcess
586
590
  Action: ReleaseProcess
587
591
 
@@ -595,7 +599,7 @@ def release_process(ctx: Optional[dict], req: models.ReleaseProcessReq):
595
599
 
596
600
  async def release_process_async(ctx: Optional[dict], req: models.ReleaseProcessReq):
597
601
  """制作镜像(异步)
598
- 将指定进程的当前环境制作为容器镜像
602
+ 将指定进程的当前环境制作为容器镜像。操作者用户 ID 从请求头 X-Kb-Subject 获取(网关鉴权后注入,必填),用于记录提交镜像的操作者信息,缺失时返回参数错误
599
603
  POST /workspace/v1alpha1/ReleaseProcess
600
604
  Action: ReleaseProcess
601
605
 
@@ -51,6 +51,8 @@ class BatchStopWorkspacesData:
51
51
  @dataclass
52
52
  class CommitHistoryResponse:
53
53
  CommitTime: Optional[str] = "" # 制作时间(RFC3339 格式) json:"CommitTime,omitempty"
54
+ Creator: Optional[str] = "" # 制作镜像的操作者用户名 json:"Creator,omitempty"
55
+ CreatorId: Optional[str] = "" # 制作镜像的操作者用户 ID json:"CreatorId,omitempty"
54
56
  Description: Optional[str] = "" # 描述 json:"Description,omitempty"
55
57
  ErrorMsg: Optional[str] = "" # 错误信息 json:"ErrorMsg,omitempty"
56
58
  Image: Optional[str] = "" # 镜像地址 json:"Image,omitempty"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yicloud-sdk-python
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: YiCloud OpenAPI SDK for Python
5
5
  Author: YiCloud
6
6
  Project-URL: Homepage, https://gitee.com/yicloud-team/openapi-sdk-python