@leaflow/sdk 0.0.0-dev.13.g732c6b7 → 0.0.0-dev.130.g2ad4b23

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 (36) hide show
  1. package/README.md +22 -12
  2. package/dist/account/v1/index.d.ts +14 -2
  3. package/dist/account/v1/schema.d.ts +368 -81
  4. package/dist/assistant/v1/index.d.ts +30 -2
  5. package/dist/assistant/v1/schema.d.ts +1089 -133
  6. package/dist/billing/v1/index.d.ts +192 -0
  7. package/dist/billing/v1/index.js +5 -0
  8. package/dist/billing/v1/schema.d.ts +4625 -0
  9. package/dist/billing/v1/schema.js +5 -0
  10. package/dist/canopy/v1/schema.d.ts +113 -109
  11. package/dist/compute/v1/index.d.ts +30 -6
  12. package/dist/compute/v1/schema.d.ts +1202 -273
  13. package/dist/dns/v1/index.d.ts +42 -0
  14. package/dist/dns/v1/index.js +5 -0
  15. package/dist/dns/v1/schema.d.ts +887 -0
  16. package/dist/dns/v1/schema.js +5 -0
  17. package/dist/fleet/v1/index.d.ts +6 -0
  18. package/dist/fleet/v1/index.js +5 -0
  19. package/dist/fleet/v1/schema.d.ts +156 -0
  20. package/dist/fleet/v1/schema.js +5 -0
  21. package/dist/iam/v1/index.d.ts +26 -4
  22. package/dist/iam/v1/schema.d.ts +515 -88
  23. package/dist/index.d.ts +5 -0
  24. package/dist/monitoring/v1/index.d.ts +84 -4
  25. package/dist/monitoring/v1/schema.d.ts +2420 -527
  26. package/dist/notification/v1/index.d.ts +76 -0
  27. package/dist/notification/v1/index.js +5 -0
  28. package/dist/notification/v1/schema.d.ts +2048 -0
  29. package/dist/notification/v1/schema.js +5 -0
  30. package/dist/support/v1/index.d.ts +50 -0
  31. package/dist/support/v1/index.js +5 -0
  32. package/dist/support/v1/schema.d.ts +1082 -0
  33. package/dist/support/v1/schema.js +5 -0
  34. package/dist/tunnel/v1/index.d.ts +14 -36
  35. package/dist/tunnel/v1/schema.d.ts +70 -510
  36. package/package.json +2 -2
@@ -10,16 +10,16 @@ export interface paths {
10
10
  path?: never;
11
11
  cookie?: never;
12
12
  };
13
- /** 列出备份 */
13
+ /** List backups */
14
14
  get: operations["list-backups"];
15
15
  put?: never;
16
16
  /**
17
- * 创建备份
18
- * @description 备份是云硬盘在独立存储中的一份完整副本:**源云硬盘删除后仍可恢复,且可恢复到本地区的其他可用区。**快照不具备这两项能力,它与源云硬盘位于同一存储,且源云硬盘存在快照时无法删除。
17
+ * Create a backup
18
+ * @description A backup is a complete copy of a disk held in separate storage: **it remains restorable after the source disk is deleted, and can be restored to another availability zone in the same region.** A snapshot offers neither capability, as it resides in the same storage as the source disk and prevents that disk from being deleted while it exists.
19
19
  *
20
- * 运行中云服务器上挂载的云硬盘、以及系统盘,均可创建备份。
20
+ * Disks attached to a running instance, including system disks, can be backed up.
21
21
  *
22
- * 备份耗时取决于数据量。接口返回时尚未完成,请轮询查看接口。
22
+ * The duration depends on the amount of data. The backup is not complete when this endpoint returns; poll the retrieve endpoint.
23
23
  */
24
24
  post: operations["create-backup"];
25
25
  delete?: never;
@@ -36,20 +36,20 @@ export interface paths {
36
36
  cookie?: never;
37
37
  };
38
38
  /**
39
- * 查看备份
40
- * @description 会实时查询备份的当前状态,因此比列表接口慢但更准确。轮询创建进度请使用本接口。
39
+ * Retrieve a backup
40
+ * @description Queries the current state of the backup, which makes it slower but more accurate than the list endpoint. Use it to poll creation progress.
41
41
  */
42
42
  get: operations["get-backup"];
43
43
  put?: never;
44
44
  post?: never;
45
45
  /**
46
- * 删除备份
47
- * @description 与源云硬盘无关,源云硬盘是否存在都不影响删除。
46
+ * Delete a backup
47
+ * @description Independent of the source disk: deletion succeeds whether or not that disk still exists.
48
48
  */
49
49
  delete: operations["delete-backup"];
50
50
  options?: never;
51
51
  head?: never;
52
- /** 重命名备份 */
52
+ /** Rename a backup */
53
53
  patch: operations["rename-backup"];
54
54
  trace?: never;
55
55
  };
@@ -63,10 +63,10 @@ export interface paths {
63
63
  get?: never;
64
64
  put?: never;
65
65
  /**
66
- * 由备份恢复
67
- * @description 恢复到一块**新建的**云硬盘上,源云硬盘不受影响,也不要求它仍然存在。
66
+ * Restore from a backup
67
+ * @description Restores onto a **newly created** disk. The source disk is unaffected and need not still exist.
68
68
  *
69
- * 目标硬盘类型可位于本地区的其他可用区,容量不能小于备份。恢复完成前该云硬盘不可挂载,请轮询云硬盘查看接口。
69
+ * The target disk type may belong to another availability zone of the same region, and its capacity must not be smaller than the backup. The disk cannot be attached until the restore completes; poll the disk retrieve endpoint.
70
70
  */
71
71
  post: operations["restore-backup"];
72
72
  delete?: never;
@@ -82,7 +82,10 @@ export interface paths {
82
82
  path?: never;
83
83
  cookie?: never;
84
84
  };
85
- /** 列出在售硬盘类型 */
85
+ /**
86
+ * List disk types on sale
87
+ * @description Only disk types currently on sale are listed. A withdrawn one disappears from here and can no longer be bought, while the disks already on it keep working and can still be resized.
88
+ */
86
89
  get: operations["list-disk-types"];
87
90
  put?: never;
88
91
  post?: never;
@@ -92,6 +95,26 @@ export interface paths {
92
95
  patch?: never;
93
96
  trace?: never;
94
97
  };
98
+ "/api/v1/disk-types/{diskTypeId}": {
99
+ parameters: {
100
+ query?: never;
101
+ header?: never;
102
+ path?: never;
103
+ cookie?: never;
104
+ };
105
+ /**
106
+ * Get a disk type
107
+ * @description Retrieve capacity and performance constraints for an existing disk, including system disk types and types withdrawn from sale.
108
+ */
109
+ get: operations["get-disk-type"];
110
+ put?: never;
111
+ post?: never;
112
+ delete?: never;
113
+ options?: never;
114
+ head?: never;
115
+ patch?: never;
116
+ trace?: never;
117
+ };
95
118
  "/api/v1/images": {
96
119
  parameters: {
97
120
  query?: never;
@@ -100,8 +123,10 @@ export interface paths {
100
123
  cookie?: never;
101
124
  };
102
125
  /**
103
- * 列出在售镜像
104
- * @description min_ram_mb 超过所选机型内存的镜像无法启动,请据此过滤可选项。
126
+ * List images on sale
127
+ * @description An image whose `min_ram_mb` exceeds the memory of the selected instance type cannot boot. Filter the options accordingly.
128
+ *
129
+ * Only images currently on sale are listed. An image the platform withdraws disappears from here and can no longer install new instances, while the instances already running it keep running and can still be rebuilt onto it.
105
130
  */
106
131
  get: operations["list-images"];
107
132
  put?: never;
@@ -119,7 +144,10 @@ export interface paths {
119
144
  path?: never;
120
145
  cookie?: never;
121
146
  };
122
- /** 列出在售机型 */
147
+ /**
148
+ * List instance types on sale
149
+ * @description Only instance types currently on sale are listed. A withdrawn one disappears from here and can no longer be ordered, while the instances already running it keep running.
150
+ */
123
151
  get: operations["list-instance-types"];
124
152
  put?: never;
125
153
  post?: never;
@@ -136,7 +164,7 @@ export interface paths {
136
164
  path?: never;
137
165
  cookie?: never;
138
166
  };
139
- /** 列出可用的地区 */
167
+ /** List available regions */
140
168
  get: operations["list-regions"];
141
169
  put?: never;
142
170
  post?: never;
@@ -154,8 +182,8 @@ export interface paths {
154
182
  cookie?: never;
155
183
  };
156
184
  /**
157
- * 列出一个地区的可用区
158
- * @description 云硬盘与云服务器必须位于同一可用区才能挂载,创建前请确认所选可用区。
185
+ * List the availability zones of a region
186
+ * @description A disk and an instance must reside in the same availability zone to be attached. Confirm the zone before creating either.
159
187
  */
160
188
  get: operations["list-availability-zones"];
161
189
  put?: never;
@@ -174,14 +202,16 @@ export interface paths {
174
202
  cookie?: never;
175
203
  };
176
204
  /**
177
- * 列出云硬盘
178
- * @description 同时提供 region_code 与 availability_zone 时,只返回可挂载到该位置云服务器的云硬盘。
205
+ * List disks
206
+ * @description When both `region_code` and `availability_zone` are supplied, only disks attachable to an instance at that location are returned.
179
207
  */
180
208
  get: operations["list-disks"];
181
209
  put?: never;
182
210
  /**
183
- * 创建云硬盘
184
- * @description 云硬盘创建在所选硬盘类型所属的可用区,云服务器必须位于同一可用区才能挂载。因此选定硬盘类型即确定了可用区。
211
+ * Create a disk
212
+ * @description The disk is created in the availability zone of the selected disk type, and an instance must reside in the same zone to attach it. Choosing the disk type therefore determines the zone.
213
+ *
214
+ * A disk type that has been withdrawn is rejected with `DISK_TYPE_RETIRED`, even though its identifier still resolves. Withdrawn types stop appearing in the disk type listing; disks already bought on one keep working and can still be resized.
185
215
  */
186
216
  post: operations["create-disk"];
187
217
  delete?: never;
@@ -198,22 +228,22 @@ export interface paths {
198
228
  cookie?: never;
199
229
  };
200
230
  /**
201
- * 查看云硬盘
202
- * @description 会实时查询云硬盘的当前状态,因此比列表接口慢但更准确。
231
+ * Retrieve a disk
232
+ * @description Queries the current state of the disk, which makes it slower but more accurate than the list endpoint.
203
233
  */
204
234
  get: operations["get-disk"];
205
235
  put?: never;
206
236
  post?: never;
207
237
  /**
208
- * 删除云硬盘
209
- * @description 云硬盘处于挂载状态,或仍存在基于它创建的快照时,删除会被拒绝。
238
+ * Delete a disk
239
+ * @description Deletion is rejected while the disk is attached, or while snapshots created from it still exist.
210
240
  */
211
241
  delete: operations["delete-disk"];
212
242
  options?: never;
213
243
  head?: never;
214
244
  /**
215
- * 重命名云硬盘
216
- * @description 仅可修改名称。容量请使用扩容接口,类型与可用区不可修改。
245
+ * Rename a disk
246
+ * @description Changes the name only. Use the resize endpoint for capacity; type and availability zone are immutable.
217
247
  */
218
248
  patch: operations["rename-disk"];
219
249
  trace?: never;
@@ -228,8 +258,14 @@ export interface paths {
228
258
  get?: never;
229
259
  put?: never;
230
260
  /**
231
- * 扩容
232
- * @description 容量只能增加,不支持缩容。扩容完成后需在云服务器内自行扩展文件系统。
261
+ * Resize a disk
262
+ * @description Capacity can only be increased; shrinking is not supported. Extend the file system inside the instance once the resize completes.
263
+ *
264
+ * **A data disk whose performance grows with its size has to be detached first.** The storage backend decides a volume's limit when the volume is attached and never revisits it, so growing one that is attached would give you the capacity immediately and leave the speed at the old size's figure — indefinitely, and stopping the instance does not help. Rather than take the money for performance that does not arrive, this is refused with `DISK_RESIZE_NEEDS_DETACH`; detach the disk, resize it, and attach it again.
265
+ *
266
+ * It is only refused when the two sizes really would differ in speed. A disk whose type has no QoS level, or whose performance has already reached the type's ceiling, grows online as before.
267
+ *
268
+ * **A system disk is the exception and grows online**, because a root volume cannot be detached at all. Its performance does not change with size for exactly that reason — system disk types are required to carry a level that does not scale.
233
269
  */
234
270
  post: operations["resize-disk"];
235
271
  delete?: never;
@@ -248,12 +284,12 @@ export interface paths {
248
284
  get?: never;
249
285
  put?: never;
250
286
  /**
251
- * 回滚到快照
252
- * @description 将云硬盘的内容恢复到创建该快照的时刻。**该时刻之后写入的数据全部丢失,且无法撤销。**
287
+ * Revert to a snapshot
288
+ * @description Restores the contents of the disk to the moment the snapshot was taken. **All data written after that moment is lost and cannot be recovered.**
253
289
  *
254
- * 三项限制:只能回滚到该云硬盘最新的一个快照;云硬盘必须先从云服务器上卸载;创建快照后扩容过的云硬盘不能回滚。需要回到更早的时刻,或需要保留现有云硬盘时,请改用由快照创建一块新的云硬盘。
290
+ * Three restrictions apply: only the most recent snapshot of the disk can be reverted to; the disk must be detached from its instance first; and a disk resized since the snapshot was taken cannot be reverted. To return to an earlier point in time, or to keep the existing disk, create a new disk from the snapshot instead.
255
291
  *
256
- * 接口返回时回滚尚未完成,请轮询查看接口。
292
+ * The revert is not complete when this endpoint returns; poll the retrieve endpoint.
257
293
  */
258
294
  post: operations["revert-disk"];
259
295
  delete?: never;
@@ -269,14 +305,14 @@ export interface paths {
269
305
  path?: never;
270
306
  cookie?: never;
271
307
  };
272
- /** 列出公网 IP */
308
+ /** List floating IPs */
273
309
  get: operations["list-floating-ips"];
274
310
  put?: never;
275
311
  /**
276
- * 申领公网 IP
277
- * @description 若该私有网络尚未连通外网,会一并为其接入外网。
312
+ * Allocate a floating IP
313
+ * @description If the private network is not yet connected to the internet, connectivity is established as part of this call.
278
314
  *
279
- * IPv6 不通过本接口申请。IPv6 地址由私有网络自动下发至云服务器,在私有网络上启用即可。
315
+ * IPv6 is not requested through this endpoint. IPv6 addresses are assigned to instances by the private network; enable IPv6 on that network instead.
280
316
  */
281
317
  post: operations["allocate-floating-ip"];
282
318
  delete?: never;
@@ -292,13 +328,13 @@ export interface paths {
292
328
  path?: never;
293
329
  cookie?: never;
294
330
  };
295
- /** 查看公网 IP */
331
+ /** Retrieve a floating IP */
296
332
  get: operations["get-floating-ip"];
297
333
  put?: never;
298
334
  post?: never;
299
335
  /**
300
- * 释放公网 IP
301
- * @description 地址释放后进入冷却期才会重新分配,以免仍指向它的 DNS 记录和访问白名单立即失效。因此释放后的短时间内**无法重新申领同一个地址**,请谨慎操作。
336
+ * Release a floating IP
337
+ * @description A released address enters a cooldown period before it is allocated again, so that DNS records and allow-lists still pointing at it do not break immediately. **The same address therefore cannot be re-allocated** for some time after release. Proceed with care.
302
338
  */
303
339
  delete: operations["release-floating-ip"];
304
340
  options?: never;
@@ -315,8 +351,10 @@ export interface paths {
315
351
  };
316
352
  get?: never;
317
353
  /**
318
- * 设带宽上限
319
- * @description 出入两个方向同时限速。仅限制出方向无法防止入方向流量打满上联带宽。
354
+ * Set the bandwidth limit
355
+ * @description Limits both directions at once. Limiting egress alone does not prevent ingress traffic from saturating the uplink.
356
+ *
357
+ * While the address is bound to an instance, the ceiling has to fit that instance type's `max_bandwidth_mbps`; asking for more is refused with `INSTANCE_BANDWIDTH_CEILING`. An address bound to nothing is not checked against any type — there is none to check against — and is checked again when it is attached.
320
358
  */
321
359
  put: operations["set-floating-ip-bandwidth"];
322
360
  post?: never;
@@ -334,12 +372,12 @@ export interface paths {
334
372
  cookie?: never;
335
373
  };
336
374
  get?: never;
337
- /** 将公网 IP 绑定到网卡 */
375
+ /** Bind a floating IP to a network interface */
338
376
  put: operations["bind-floating-ip"];
339
377
  post?: never;
340
378
  /**
341
- * 解绑公网 IP
342
- * @description 地址仍归本项目持有,只是不再指向任何网卡。
379
+ * Unbind a floating IP
380
+ * @description The address remains held by the project and simply no longer points at any network interface.
343
381
  */
344
382
  delete: operations["unbind-floating-ip"];
345
383
  options?: never;
@@ -354,22 +392,29 @@ export interface paths {
354
392
  path?: never;
355
393
  cookie?: never;
356
394
  };
357
- /** 列出云服务器 */
395
+ /**
396
+ * List instances
397
+ * @description Every instance in the project, newest first. This endpoint does not query backend state; for the accurate state of one instance, use the retrieve endpoint.
398
+ */
358
399
  get: operations["list-instances"];
359
400
  put?: never;
360
401
  /**
361
- * 创建云服务器
362
- * @description **必须在请求中设置密码**:不设置时请求会被拒绝,否则创建出的云服务器将无法登录。密码可由平台生成,此时仅在本次响应中返回一次。
402
+ * Create instances
403
+ * @description **A password must be set in the request.** The request is rejected otherwise, since the resulting instance would be unreachable. The platform can generate one, in which case it is returned only in this response.
363
404
  *
364
- * `count` 可一次创建多台(最多 20 台),名称自动加 `-1`、`-2` 编号,所有云服务器共用同一个密码。**响应中的 `instances` 始终是数组**,单台创建时也是。
405
+ * `count` creates several instances at once, 20 at most. Names are numbered `-1`, `-2` automatically and all instances share one password. **`instances` in the response is always an array**, including for a single instance.
365
406
  *
366
- * 批量创建按顺序逐台进行。若中途失败(例如配额不足),**已创建的云服务器会保留**,响应中的 `failure` 给出中止原因;第一台就失败时视为整次请求失败,不会创建任何云服务器。
407
+ * Instances are created one by one in order. If the sequence stops part way through, because of a quota limit for example, **the instances already created are kept** and `failure` states why it stopped. A failure on the first instance is treated as a failure of the whole request and no instance is created.
367
408
  *
368
- * 镜像二选一:`image_id` 使用平台提供的镜像,`private_image_id` 使用自制镜像。两者都给或都不给都会被拒绝。
409
+ * Exactly one source must be given: `image_id` for a platform image, `private_image_id` for a private image, or `boot_disk_id` to boot a disk you already have. Supplying more than one, or none, is rejected.
369
410
  *
370
- * 云服务器创建在机型所属的可用区。后续要挂载的云硬盘必须位于同一可用区。
411
+ * A platform image that has been withdrawn is rejected with `IMAGE_RETIRED`, and an instance type that has been withdrawn with `INSTANCE_TYPE_RETIRED` — in both cases the identifier still resolves. Withdrawn entries stop appearing in their listing, so an identifier held in a script, a template or an earlier order is the way this is usually hit: reread the listing and pick another. Instances already running either are unaffected, and one on a withdrawn image can still be rebuilt onto it.
371
412
  *
372
- * 接口返回时创建尚未完成(status 为 provisioning),请轮询 GET 确认结果。
413
+ * `boot_disk_id` recovers an instance that can no longer be repaired from the inside. Snapshot its disk, restore that snapshot into a new disk, attach the new disk to another instance and repair it there, then create an instance from it. That disk is not deleted when the instance is released; it is detached and returned to you.
414
+ *
415
+ * Instances are created in the availability zone of the instance type. Disks to be attached later must reside in the same zone.
416
+ *
417
+ * Creation is not complete when this endpoint returns and `status` is `provisioning`. Poll GET to observe the outcome.
373
418
  */
374
419
  post: operations["launch-instance"];
375
420
  delete?: never;
@@ -386,29 +431,29 @@ export interface paths {
386
431
  cookie?: never;
387
432
  };
388
433
  /**
389
- * 查看云服务器
390
- * @description 会实时查询云服务器的当前状态,因此比列表接口慢但更准确。轮询创建进度请使用本接口。
434
+ * Retrieve an instance
435
+ * @description Queries the current state of the instance, which makes it slower but more accurate than the list endpoint. Use it to poll creation progress.
391
436
  */
392
437
  get: operations["get-instance"];
393
438
  put?: never;
394
439
  post?: never;
395
440
  /**
396
- * 释放云服务器
397
- * @description 系统盘随云服务器一并删除,**基于系统盘创建的快照也会一并删除**。数据盘会被卸载并保留,其快照与备份不受影响。主网卡随云服务器一并释放。
441
+ * Release an instance
442
+ * @description The system disk is deleted with the instance, and **snapshots created from the system disk are deleted with it**. Data disks are detached and kept, and their snapshots and backups are unaffected. The primary network interface is released with the instance.
398
443
  *
399
- * 正在制作镜像的云服务器无法释放,请等待制作完成或先删除该镜像。
444
+ * An instance being captured as a private image cannot be released. Wait for the capture to finish, or delete that image first.
400
445
  */
401
446
  delete: operations["delete-instance"];
402
447
  options?: never;
403
448
  head?: never;
404
449
  /**
405
- * 重命名云服务器
406
- * @description 仅修改显示名称。云服务器内的主机名不变,它等于云服务器 id。
450
+ * Rename an instance
451
+ * @description Changes the display name only. The hostname inside the instance is unchanged; it equals the instance id.
407
452
  */
408
453
  patch: operations["rename-instance"];
409
454
  trace?: never;
410
455
  };
411
- "/api/v1/instances/{instanceId}/actions": {
456
+ "/api/v1/instances/{instanceId}/commands": {
412
457
  parameters: {
413
458
  query?: never;
414
459
  header?: never;
@@ -418,14 +463,26 @@ export interface paths {
418
463
  get?: never;
419
464
  put?: never;
420
465
  /**
421
- * 开机、关机、重启
422
- * @description 重启默认为软重启,由操作系统正常关闭后重新启动。
466
+ * Run a command on an instance
467
+ * @description Runs one command over SSH and returns what it wrote. **This is not a shell.** There is no terminal, no standard input and no way to answer a prompt: a command that waits for input produces nothing and is killed at the timeout. Chain steps with `&&`, or write a script and run that.
468
+ *
469
+ * **A command that fails is still a 200.** Its failure is its own result, not this endpoint's: read `exit_code` for what it exited with and `stderr` for what it said, and decide from those. A `grep` that matches nothing exits 1 and is a perfectly successful call.
423
470
  *
424
- * 系统已无响应时软重启不会生效,此时可设置 `force` 强制重启。强制重启不等待操作系统关闭,**未落盘的数据会丢失**。`force` 仅适用于 reboot。
471
+ * The status therefore answers a different question — did the command run at all. A non-2xx means it did not, and nothing about the instance was changed by this request: it was suspended, not running or had no floating IP; or it refused the platform key; or the connection could not be opened. Retrying is meaningful in those cases and is not for a non-zero `exit_code`.
425
472
  *
426
- * 已被平台停服的云服务器需先解除停服。
473
+ * Three conditions must hold; the instance is unreachable otherwise:
474
+ *
475
+ * - it is `running`
476
+ * - a floating IP is bound to it, since this endpoint connects over the public internet
477
+ * - its security group permits inbound TCP 22
478
+ *
479
+ * Authentication uses the key the platform attaches to every instance at creation, so nothing has to be set up first. The instance must have applied that key at first boot, which images without a full cloud-init do not do.
480
+ *
481
+ * **Do not pass secrets in the command.** Read them from a file on the instance instead: neither the command nor its output is a confidential channel.
482
+ *
483
+ * Each stream is capped at 1 MiB. Beyond that the rest is discarded and `truncated` is true.
427
484
  */
428
- post: operations["act-on-instance"];
485
+ post: operations["run-instance-command"];
429
486
  delete?: never;
430
487
  options?: never;
431
488
  head?: never;
@@ -442,10 +499,10 @@ export interface paths {
442
499
  get?: never;
443
500
  put?: never;
444
501
  /**
445
- * 打开远程控制台
446
- * @description 在浏览器中直接操作云服务器,无需网络可达,适用于网络配置失误导致无法登录的情况。
502
+ * Open a remote console
503
+ * @description Operates the instance directly from a browser and does not require the instance to be reachable over the network, which makes it usable when a network misconfiguration prevents login.
447
504
  *
448
- * 返回的地址一次性使用,数分钟后失效。**请勿缓存**,每次使用前重新获取。
505
+ * The returned address is single-use and expires within minutes. **Do not cache it**; request a new one before each use.
449
506
  */
450
507
  post: operations["open-instance-console"];
451
508
  delete?: never;
@@ -462,10 +519,10 @@ export interface paths {
462
519
  cookie?: never;
463
520
  };
464
521
  /**
465
- * 读取串口输出
466
- * @description 云服务器启动过程与内核输出的原始文本。无法登录或远程控制台无输出时,应首先查看本接口。其中可查看启动停止于哪一步、系统盘是否正常挂载、初始化过程是否报错。
522
+ * Read the console output
523
+ * @description The raw text produced by the instance during boot and by the kernel. Consult it first when login fails or the remote console shows no output: it reveals where boot stopped, whether the system disk was mounted, and whether initialisation reported errors.
467
524
  *
468
- * 处于错误状态或已被平台停服的云服务器同样可以读取。
525
+ * Instances in an error state, and instances suspended by the platform, can be read as well.
469
526
  */
470
527
  get: operations["get-instance-console-output"];
471
528
  put?: never;
@@ -476,6 +533,54 @@ export interface paths {
476
533
  patch?: never;
477
534
  trace?: never;
478
535
  };
536
+ "/api/v1/instances/{instanceId}/labels": {
537
+ parameters: {
538
+ query?: never;
539
+ header?: never;
540
+ path?: never;
541
+ cookie?: never;
542
+ };
543
+ get?: never;
544
+ /**
545
+ * Replace an instance's labels
546
+ * @description Records what this instance is for, as key-value pairs. Nothing on the platform reads them.
547
+ *
548
+ * **The whole set is replaced**: whatever is absent from the request is removed.
549
+ *
550
+ * Do not put credentials here. Labels are visible to platform operators.
551
+ */
552
+ put: operations["set-instance-labels"];
553
+ post?: never;
554
+ delete?: never;
555
+ options?: never;
556
+ head?: never;
557
+ patch?: never;
558
+ trace?: never;
559
+ };
560
+ "/api/v1/instances/{instanceId}/notes": {
561
+ parameters: {
562
+ query?: never;
563
+ header?: never;
564
+ path?: never;
565
+ cookie?: never;
566
+ };
567
+ get?: never;
568
+ /**
569
+ * Replace an instance's note
570
+ * @description A free-text note about this instance — what it runs, and what to be careful about before touching it.
571
+ *
572
+ * **The whole note is replaced**; send an empty string to clear it.
573
+ *
574
+ * Do not put credentials here. The note is visible to platform operators.
575
+ */
576
+ put: operations["set-instance-notes"];
577
+ post?: never;
578
+ delete?: never;
579
+ options?: never;
580
+ head?: never;
581
+ patch?: never;
582
+ trace?: never;
583
+ };
479
584
  "/api/v1/instances/{instanceId}/password": {
480
585
  parameters: {
481
586
  query?: never;
@@ -486,12 +591,12 @@ export interface paths {
486
591
  get?: never;
487
592
  put?: never;
488
593
  /**
489
- * 重置登录密码
490
- * @description 在不重启的情况下改掉 root 的密码,云服务器必须处于运行中。
594
+ * Reset the login password
595
+ * @description Changes the root password without a reboot. The instance must be running.
491
596
  *
492
- * **并非所有镜像都支持**:镜像列表中 `supports_password_reset` 为 false 的镜像做不到,此时只能通过重装系统设置新密码,而重装会清除系统盘上的全部数据。
597
+ * **Not every image supports this.** Images whose `supports_password_reset` is false cannot, and a new password can then only be set by rebuilding the instance, which erases all data on the system disk.
493
598
  *
494
- * 镜像标记为支持、但云服务器内相应组件已被卸载或停止时,本接口同样会被拒绝。
599
+ * The request is also rejected when the image is marked as supported but the corresponding component has been removed or stopped inside the instance.
495
600
  */
496
601
  post: operations["reset-instance-password"];
497
602
  delete?: never;
@@ -500,6 +605,34 @@ export interface paths {
500
605
  patch?: never;
501
606
  trace?: never;
502
607
  };
608
+ "/api/v1/instances/{instanceId}/reboot": {
609
+ parameters: {
610
+ query?: never;
611
+ header?: never;
612
+ path?: never;
613
+ cookie?: never;
614
+ };
615
+ get?: never;
616
+ put?: never;
617
+ /**
618
+ * Reboot an instance
619
+ * @description A reboot defaults to soft, in which the operating system shuts down normally before starting again.
620
+ *
621
+ * A soft reboot has no effect once the system is unresponsive. Set `force` to reboot forcibly: a forced reboot does not wait for the operating system to shut down, so **unwritten data is lost**.
622
+ *
623
+ * A forced reboot is accepted while the instance is already `rebooting`, which is the way out of a soft reboot the instance never carried out. Every other endpoint refuses an instance in a transient state, and a second soft reboot is refused as well.
624
+ *
625
+ * An instance suspended by the platform must be unsuspended first.
626
+ *
627
+ * This endpoint returns immediately and the `status` it returns is the transient `rebooting`. Poll the instance until it settles at `running`.
628
+ */
629
+ post: operations["reboot-instance"];
630
+ delete?: never;
631
+ options?: never;
632
+ head?: never;
633
+ patch?: never;
634
+ trace?: never;
635
+ };
503
636
  "/api/v1/instances/{instanceId}/rebuild": {
504
637
  parameters: {
505
638
  query?: never;
@@ -510,8 +643,10 @@ export interface paths {
510
643
  get?: never;
511
644
  put?: never;
512
645
  /**
513
- * 重装系统
514
- * @description **系统盘数据将被清除且无法恢复。** 已挂载的数据盘不受影响。
646
+ * Rebuild an instance
647
+ * @description **All data on the system disk is erased and cannot be recovered.** Attached data disks are unaffected.
648
+ *
649
+ * The image this instance already runs is accepted even after the platform has withdrawn it, since rebuilding is the only way back into an instance broken from the inside. Any *other* withdrawn image is rejected with `IMAGE_RETIRED`, which is a change of image and therefore a new order.
515
650
  */
516
651
  post: operations["rebuild-instance"];
517
652
  delete?: never;
@@ -530,12 +665,12 @@ export interface paths {
530
665
  get?: never;
531
666
  put?: never;
532
667
  /**
533
- * 变配
534
- * @description 只能变更为同一地区、同一可用区的机型,否则已挂载的云硬盘无法随之迁移。
668
+ * Resize an instance
669
+ * @description Only an instance type in the same region and availability zone can be selected, as attached disks cannot follow the instance elsewhere.
535
670
  *
536
- * 变配分两步:本接口下发后云服务器会在新规格上重新启动,状态变为 `resize_verifying`,此时**必须**调用确认或回滚接口。目标机型在确认前记在 `pending_instance_type_id` 上,`instance_type_id` 仍为当前生效并计费的机型。
671
+ * A resize has two steps. This endpoint restarts the instance on the new size and the status becomes `resize_verifying`, at which point the confirm or revert endpoint **must** be called. Until confirmation the target type is recorded in `pending_instance_type_id`, while `instance_type_id` remains the type in effect and billed.
537
672
  *
538
- * **未确认期间新旧两份规格同时占用资源。** 请在状态变为 `resize_verifying` 后尽快确认。
673
+ * **Both sizes hold resources while the resize is unconfirmed.** Confirm promptly once the status becomes `resize_verifying`.
539
674
  */
540
675
  post: operations["resize-instance"];
541
676
  delete?: never;
@@ -554,8 +689,8 @@ export interface paths {
554
689
  get?: never;
555
690
  put?: never;
556
691
  /**
557
- * 确认变配
558
- * @description 释放原规格占用的资源,`pending_instance_type_id` 成为生效机型并从此按它计费。
692
+ * Confirm a resize
693
+ * @description Releases the resources held by the previous size. `pending_instance_type_id` becomes the type in effect and is billed from then on.
559
694
  */
560
695
  post: operations["confirm-instance-resize"];
561
696
  delete?: never;
@@ -574,8 +709,8 @@ export interface paths {
574
709
  get?: never;
575
710
  put?: never;
576
711
  /**
577
- * 回滚变配
578
- * @description 云服务器回到原规格,`pending_instance_type_id` 被丢弃,计费不受本次变配影响。
712
+ * Revert a resize
713
+ * @description The instance returns to its previous size, `pending_instance_type_id` is discarded, and billing is unaffected by the resize.
579
714
  */
580
715
  post: operations["revert-instance-resize"];
581
716
  delete?: never;
@@ -584,6 +719,52 @@ export interface paths {
584
719
  patch?: never;
585
720
  trace?: never;
586
721
  };
722
+ "/api/v1/instances/{instanceId}/start": {
723
+ parameters: {
724
+ query?: never;
725
+ header?: never;
726
+ path?: never;
727
+ cookie?: never;
728
+ };
729
+ get?: never;
730
+ put?: never;
731
+ /**
732
+ * Start an instance
733
+ * @description An instance suspended by the platform must be unsuspended first.
734
+ *
735
+ * This endpoint returns immediately and the `status` it returns is the transient `starting`. Poll the instance until it settles at `running`.
736
+ */
737
+ post: operations["start-instance"];
738
+ delete?: never;
739
+ options?: never;
740
+ head?: never;
741
+ patch?: never;
742
+ trace?: never;
743
+ };
744
+ "/api/v1/instances/{instanceId}/stop": {
745
+ parameters: {
746
+ query?: never;
747
+ header?: never;
748
+ path?: never;
749
+ cookie?: never;
750
+ };
751
+ get?: never;
752
+ put?: never;
753
+ /**
754
+ * Stop an instance
755
+ * @description The operating system is asked to shut down and is powered off once it does, or once it stops responding for long enough. Stopping does not release the instance: it keeps its disks, its addresses and its name, and starts again where it left off.
756
+ *
757
+ * An instance suspended by the platform must be unsuspended first.
758
+ *
759
+ * This endpoint returns immediately and the `status` it returns is the transient `stopping`. Poll the instance until it settles at `stopped`.
760
+ */
761
+ post: operations["stop-instance"];
762
+ delete?: never;
763
+ options?: never;
764
+ head?: never;
765
+ patch?: never;
766
+ trace?: never;
767
+ };
587
768
  "/api/v1/instances/{instanceId}/disks": {
588
769
  parameters: {
589
770
  query?: never;
@@ -591,12 +772,12 @@ export interface paths {
591
772
  path?: never;
592
773
  cookie?: never;
593
774
  };
594
- /** 列出云服务器已挂载的云硬盘 */
775
+ /** List the disks attached to an instance */
595
776
  get: operations["list-instance-disks"];
596
777
  put?: never;
597
778
  /**
598
- * 挂载云硬盘
599
- * @description 云硬盘必须与云服务器位于同一地区和可用区。挂载后需在云服务器内自行分区并挂载文件系统。
779
+ * Attach a disk
780
+ * @description The disk must be in the same region and availability zone as the instance. Partition it and mount the file system inside the instance once it is attached.
600
781
  */
601
782
  post: operations["attach-disk"];
602
783
  delete?: never;
@@ -616,8 +797,8 @@ export interface paths {
616
797
  put?: never;
617
798
  post?: never;
618
799
  /**
619
- * 卸载云硬盘
620
- * @description 请先在云服务器内卸载(umount)该设备再调用本接口,正在写入的文件系统被强制卸载会损坏数据。
800
+ * Detach a disk
801
+ * @description Unmount the device inside the instance before calling this endpoint. Forcibly detaching a file system that is being written to corrupts data.
621
802
  */
622
803
  delete: operations["detach-disk"];
623
804
  options?: never;
@@ -635,8 +816,8 @@ export interface paths {
635
816
  get?: never;
636
817
  put?: never;
637
818
  /**
638
- * 为云服务器绑定公网 IP
639
- * @description 公网 IP 绑定在云服务器的主网卡上。
819
+ * Bind a floating IP to an instance
820
+ * @description The floating IP is bound to the primary network interface of the instance.
640
821
  */
641
822
  post: operations["attach-instance-floating-ip"];
642
823
  delete?: never;
@@ -655,7 +836,7 @@ export interface paths {
655
836
  get?: never;
656
837
  put?: never;
657
838
  post?: never;
658
- /** 解绑云服务器的公网 IP */
839
+ /** Unbind the floating IP of an instance */
659
840
  delete: operations["detach-instance-floating-ip"];
660
841
  options?: never;
661
842
  head?: never;
@@ -669,10 +850,10 @@ export interface paths {
669
850
  path?: never;
670
851
  cookie?: never;
671
852
  };
672
- /** 列出云服务器的网卡 */
853
+ /** List the network interfaces of an instance */
673
854
  get: operations["list-instance-ports"];
674
855
  put?: never;
675
- /** 挂载网卡 */
856
+ /** Attach a network interface */
676
857
  post: operations["attach-port"];
677
858
  delete?: never;
678
859
  options?: never;
@@ -691,8 +872,8 @@ export interface paths {
691
872
  put?: never;
692
873
  post?: never;
693
874
  /**
694
- * 卸载网卡
695
- * @description 主网卡不可卸载,卸载后云服务器将失去网络地址。
875
+ * Detach a network interface
876
+ * @description The primary network interface cannot be detached; the instance would lose its network address.
696
877
  */
697
878
  delete: operations["detach-port"];
698
879
  options?: never;
@@ -708,12 +889,12 @@ export interface paths {
708
889
  cookie?: never;
709
890
  };
710
891
  /**
711
- * 列出本项目的操作记录
712
- * @description 记录本项目内的每一次写操作:谁、在什么时候、对什么做了什么、成功还是失败。读取操作不记录。
892
+ * List the operation log of the project
893
+ * @description Records every write operation in the project: who performed it, when, on what, and whether it succeeded. Read operations are not recorded.
713
894
  *
714
- * **平台代为执行的操作也在其中,但不显示具体执行人**,`by_platform` 为 true。例如欠费停机、违规封禁:需要知道机器何时被平台停止,但执行人属于平台内部信息。
895
+ * **Operations performed by the platform are included, but the individual operator is not disclosed** and `by_platform` is true. Suspension for non-payment and bans for abuse are examples: the time at which an instance was stopped by the platform is needed, whereas the operator is internal information.
715
896
  *
716
- * 密码一类的字段在写入时即被替换为占位符,不会出现在 `payload` 中。
897
+ * Fields such as passwords are replaced with a placeholder as the record is written and never appear in `payload`.
717
898
  */
718
899
  get: operations["list-operation-logs"];
719
900
  put?: never;
@@ -731,12 +912,12 @@ export interface paths {
731
912
  path?: never;
732
913
  cookie?: never;
733
914
  };
734
- /** 列出网卡 */
915
+ /** List network interfaces */
735
916
  get: operations["list-ports"];
736
917
  put?: never;
737
918
  /**
738
- * 创建网卡
739
- * @description 创建出的网卡尚未挂载到任何云服务器。主网卡不由本接口创建,它随云服务器一并创建。
919
+ * Create a network interface
920
+ * @description The new network interface is not attached to any instance. Primary network interfaces are not created here; they are created with the instance.
740
921
  */
741
922
  post: operations["create-port"];
742
923
  delete?: never;
@@ -756,8 +937,8 @@ export interface paths {
756
937
  put?: never;
757
938
  post?: never;
758
939
  /**
759
- * 删除网卡
760
- * @description 主网卡不可单独删除,它随云服务器一并释放。仍挂载在云服务器上的网卡也无法删除。
940
+ * Delete a network interface
941
+ * @description The primary network interface cannot be deleted on its own, as it is released with the instance. A network interface still attached to an instance cannot be deleted either.
761
942
  */
762
943
  delete: operations["delete-port"];
763
944
  options?: never;
@@ -772,23 +953,23 @@ export interface paths {
772
953
  path?: never;
773
954
  cookie?: never;
774
955
  };
775
- /** 列出自制镜像 */
956
+ /** List private images */
776
957
  get: operations["list-private-images"];
777
958
  put?: never;
778
959
  /**
779
- * 将云服务器制作为镜像
780
- * @description 依据云服务器的系统盘制作,数据盘不包含在内。制作出的镜像可用于创建云服务器或重装系统,并在源云服务器释放后继续可用。
960
+ * Capture an instance as a private image
961
+ * @description Captured from the system disk of the instance; data disks are not included. The resulting image can create instances and rebuild them, and remains usable after the source instance is released.
781
962
  *
782
- * **镜像内容取自开始制作的那一刻,此后对云服务器的改动不会包含在内。**
963
+ * **The image reflects the moment the capture started. Later changes to the instance are not included.**
783
964
  *
784
- * 制作分两个阶段,请轮询查看接口:
965
+ * The capture has two phases. Poll the retrieve endpoint:
785
966
  *
786
- * - `provisioning` 正在读取系统盘,通常数十秒。此阶段云服务器可以继续使用,但为保证一致性建议先关机。
787
- * - `uploading` 已与系统盘无关,**此时即可开机,无需等待制作完成**。该阶段耗时与系统盘容量成正比,20 GB 约需 3 分钟。
967
+ * - `provisioning` — the system disk is being read, usually for tens of seconds. The instance remains usable during this phase, although stopping it first is recommended for consistency.
968
+ * - `uploading` — no longer tied to the system disk. **The instance may be started at this point; there is no need to wait for the capture to finish.** The duration of this phase is proportional to the size of the system disk, roughly 3 minutes for 20 GB.
788
969
  *
789
- * 运行中的云服务器其文件系统可能处于写入中间状态,制作出的镜像等同于一次断电后的磁盘内容。对一致性有要求时,请在开始制作前关机,并在状态变为 `uploading` 后开机。
970
+ * The file system of a running instance may be captured mid-write, in which case the image is equivalent to the disk contents after a power loss. Where consistency matters, stop the instance before starting the capture and start it again once the status becomes `uploading`.
790
971
  *
791
- * 制作期间该云服务器可以正常启停与使用,但无法释放。
972
+ * The instance can be started, stopped and used normally during the capture, but cannot be released.
792
973
  */
793
974
  post: operations["create-private-image"];
794
975
  delete?: never;
@@ -805,22 +986,22 @@ export interface paths {
805
986
  cookie?: never;
806
987
  };
807
988
  /**
808
- * 查看自制镜像
809
- * @description 轮询制作进度请使用本接口。status 为 error 时,failure 给出失败原因。
989
+ * Retrieve a private image
990
+ * @description Use this endpoint to poll capture progress. When `status` is `error`, `failure` states the reason.
810
991
  */
811
992
  get: operations["get-private-image"];
812
993
  put?: never;
813
994
  post?: never;
814
995
  /**
815
- * 删除自制镜像
816
- * @description 仍有云服务器由该镜像创建时,删除会被拒绝:这些云服务器需要它才能重装系统。
996
+ * Delete a private image
997
+ * @description Deletion is rejected while instances created from the image still exist, as they need it in order to be rebuilt.
817
998
  *
818
- * 制作尚未完成的镜像也可以删除,制作会被终止。
999
+ * An image whose capture has not finished can be deleted; the capture is aborted.
819
1000
  */
820
1001
  delete: operations["delete-private-image"];
821
1002
  options?: never;
822
1003
  head?: never;
823
- /** 重命名自制镜像 */
1004
+ /** Rename a private image */
824
1005
  patch: operations["rename-private-image"];
825
1006
  trace?: never;
826
1007
  };
@@ -831,12 +1012,12 @@ export interface paths {
831
1012
  path?: never;
832
1013
  cookie?: never;
833
1014
  };
834
- /** 列出私有网络 */
1015
+ /** List private networks */
835
1016
  get: operations["list-private-networks"];
836
1017
  put?: never;
837
1018
  /**
838
- * 创建私有网络
839
- * @description 同时创建一张网络、一台路由器和一个默认安全组。默认安全组拒绝全部入站流量、放行全部出站流量。
1019
+ * Create a private network
1020
+ * @description Creates a network, a router and a default security group in one call. The default security group denies all inbound traffic and permits all outbound traffic.
840
1021
  */
841
1022
  post: operations["create-private-network"];
842
1023
  delete?: never;
@@ -852,20 +1033,20 @@ export interface paths {
852
1033
  path?: never;
853
1034
  cookie?: never;
854
1035
  };
855
- /** 查看私有网络 */
1036
+ /** Retrieve a private network */
856
1037
  get: operations["get-private-network"];
857
1038
  put?: never;
858
1039
  post?: never;
859
1040
  /**
860
- * 释放私有网络
861
- * @description 其中仍有云服务器或网卡时,释放会被拒绝。IPv6、路由器与安全组随之一并释放。
1041
+ * Release a private network
1042
+ * @description Release is rejected while instances or network interfaces remain in the network. IPv6, the router and the security groups are released with it.
862
1043
  */
863
1044
  delete: operations["delete-private-network"];
864
1045
  options?: never;
865
1046
  head?: never;
866
1047
  /**
867
- * 重命名私有网络
868
- * @description 仅修改显示名称。网段、路由与外网网关均不可修改。
1048
+ * Rename a private network
1049
+ * @description Changes the display name only. The CIDR, the routes and the internet gateway are immutable.
869
1050
  */
870
1051
  patch: operations["rename-private-network"];
871
1052
  trace?: never;
@@ -877,19 +1058,19 @@ export interface paths {
877
1058
  path?: never;
878
1059
  cookie?: never;
879
1060
  };
880
- /** 查看私有网络的 IPv6 */
1061
+ /** Retrieve the IPv6 configuration of a private network */
881
1062
  get: operations["get-private-network-ipv6"];
882
1063
  put?: never;
883
1064
  /**
884
- * 为私有网络启用 IPv6
885
- * @description 为该私有网络分配一段 IPv6 地址。地址由私有网络自动下发至云服务器,无需也无法单独申领,也不占用公网 IPv4。
1065
+ * Enable IPv6 on a private network
1066
+ * @description Allocates an IPv6 prefix to the private network. Addresses are assigned to instances by the network itself, can be neither requested nor released individually, and consume no public IPv4 address.
886
1067
  *
887
- * 该私有网络尚未接入外网时会自动接入,无需单独操作。
1068
+ * If the private network is not yet connected to the internet, connectivity is established as part of this call.
888
1069
  */
889
1070
  post: operations["enable-private-network-ipv6"];
890
1071
  /**
891
- * 关闭私有网络的 IPv6
892
- * @description 释放的前缀不会立即重新分配。
1072
+ * Disable IPv6 on a private network
1073
+ * @description A released prefix is not re-allocated immediately.
893
1074
  */
894
1075
  delete: operations["disable-private-network-ipv6"];
895
1076
  options?: never;
@@ -904,12 +1085,12 @@ export interface paths {
904
1085
  path?: never;
905
1086
  cookie?: never;
906
1087
  };
907
- /** 列出静态路由 */
1088
+ /** List static routes */
908
1089
  get: operations["list-routes"];
909
1090
  put?: never;
910
1091
  /**
911
- * 创建静态路由
912
- * @description 以下三种会导致网络中断的写法会被拒绝:目的网段为 0.0.0.0/0(覆盖默认路由,所有公网 IP 立即失效)、目的网段为某个子网自身(覆盖直连路由)、下一跳为某个子网的网关(指回路由器自身)。
1092
+ * Create a static route
1093
+ * @description Three forms that would sever connectivity are rejected: a destination of `0.0.0.0/0`, which overrides the default route and takes every floating IP offline immediately; a destination equal to the CIDR of a subnet, which overrides its directly connected route; and a next hop equal to the gateway of a subnet, which points back at the router itself.
913
1094
  */
914
1095
  post: operations["create-route"];
915
1096
  delete?: never;
@@ -928,7 +1109,7 @@ export interface paths {
928
1109
  get?: never;
929
1110
  put?: never;
930
1111
  post?: never;
931
- /** 删除静态路由 */
1112
+ /** Delete a static route */
932
1113
  delete: operations["delete-route"];
933
1114
  options?: never;
934
1115
  head?: never;
@@ -943,12 +1124,12 @@ export interface paths {
943
1124
  cookie?: never;
944
1125
  };
945
1126
  /**
946
- * 列出子网
947
- * @description IPv6 子网也在返回结果中,ip_version 为 6。它在启用 IPv6 时自动创建,不可单独删除。
1127
+ * List subnets
1128
+ * @description IPv6 subnets are included, with `ip_version` 6. They are created when IPv6 is enabled and cannot be deleted individually.
948
1129
  */
949
1130
  get: operations["list-subnets"];
950
1131
  put?: never;
951
- /** 创建子网 */
1132
+ /** Create a subnet */
952
1133
  post: operations["create-subnet"];
953
1134
  delete?: never;
954
1135
  options?: never;
@@ -964,8 +1145,8 @@ export interface paths {
964
1145
  cookie?: never;
965
1146
  };
966
1147
  /**
967
- * 推荐下一个空闲网段
968
- * @description 返回的只是建议值,创建子网时仍会重新校验。用于避免手工计算下一个空闲网段时出错。
1148
+ * Suggest the next free CIDR
1149
+ * @description The returned value is a suggestion and is validated again when the subnet is created. It exists to avoid errors when computing the next free CIDR by hand.
969
1150
  */
970
1151
  get: operations["suggest-subnet-cidr"];
971
1152
  put?: never;
@@ -987,8 +1168,8 @@ export interface paths {
987
1168
  put?: never;
988
1169
  post?: never;
989
1170
  /**
990
- * 删除子网
991
- * @description 该子网中仍有网卡,或仍有静态路由的下一跳落在该网段内时,删除会被拒绝。
1171
+ * Delete a subnet
1172
+ * @description Deletion is rejected while network interfaces remain in the subnet, or while a static route has a next hop inside its CIDR.
992
1173
  */
993
1174
  delete: operations["delete-subnet"];
994
1175
  options?: never;
@@ -1003,12 +1184,12 @@ export interface paths {
1003
1184
  path?: never;
1004
1185
  cookie?: never;
1005
1186
  };
1006
- /** 列出安全组 */
1187
+ /** List security groups */
1007
1188
  get: operations["list-security-groups"];
1008
1189
  put?: never;
1009
1190
  /**
1010
- * 创建安全组
1011
- * @description 新建的安全组带有一条规则:放行 ICMP 需要分片(type 3 code 4)。缺少该规则会导致路径 MTU 发现失败,表现为连接建立后传输大数据包时卡住。
1191
+ * Create a security group
1192
+ * @description A new security group carries one rule, permitting ICMP fragmentation-needed messages (type 3, code 4). Without it path MTU discovery fails, which presents as connections that establish and then stall on large packets.
1012
1193
  */
1013
1194
  post: operations["create-security-group"];
1014
1195
  delete?: never;
@@ -1024,18 +1205,22 @@ export interface paths {
1024
1205
  path?: never;
1025
1206
  cookie?: never;
1026
1207
  };
1027
- /** 查看安全组 */
1208
+ /** Retrieve a security group */
1028
1209
  get: operations["get-security-group"];
1029
1210
  put?: never;
1030
1211
  post?: never;
1031
1212
  /**
1032
- * 删除安全组
1033
- * @description 默认安全组不可删除,它随私有网络一并释放。仍被网卡引用的安全组也无法删除。
1213
+ * Delete a security group
1214
+ * @description The default security group cannot be deleted, as it is released with the private network. A security group still referenced by a network interface cannot be deleted either.
1034
1215
  */
1035
1216
  delete: operations["delete-security-group"];
1036
1217
  options?: never;
1037
1218
  head?: never;
1038
- patch?: never;
1219
+ /**
1220
+ * Rename a security group
1221
+ * @description Changes the name only. Use the rule endpoints to change rules.
1222
+ */
1223
+ patch: operations["rename-security-group"];
1039
1224
  trace?: never;
1040
1225
  };
1041
1226
  "/api/v1/security-groups/{securityGroupId}/rules": {
@@ -1045,12 +1230,12 @@ export interface paths {
1045
1230
  path?: never;
1046
1231
  cookie?: never;
1047
1232
  };
1048
- /** 列出安全组规则 */
1233
+ /** List security group rules */
1049
1234
  get: operations["list-security-group-rules"];
1050
1235
  put?: never;
1051
1236
  /**
1052
- * 创建安全组规则
1053
- * @description 重复添加同一条规则会被拒绝。判重时 `0.0.0.0/0`、`::/0` 与留空视为等同。
1237
+ * Create a security group rule
1238
+ * @description Adding an identical rule twice is rejected. For that comparison `0.0.0.0/0`, `::/0` and an omitted value are treated as equivalent.
1054
1239
  */
1055
1240
  post: operations["create-security-group-rule"];
1056
1241
  delete?: never;
@@ -1069,7 +1254,7 @@ export interface paths {
1069
1254
  get?: never;
1070
1255
  put?: never;
1071
1256
  post?: never;
1072
- /** 删除安全组规则 */
1257
+ /** Delete a security group rule */
1073
1258
  delete: operations["delete-security-group-rule"];
1074
1259
  options?: never;
1075
1260
  head?: never;
@@ -1083,14 +1268,14 @@ export interface paths {
1083
1268
  path?: never;
1084
1269
  cookie?: never;
1085
1270
  };
1086
- /** 列出快照 */
1271
+ /** List snapshots */
1087
1272
  get: operations["list-snapshots"];
1088
1273
  put?: never;
1089
1274
  /**
1090
- * 创建快照
1091
- * @description 运行中云服务器上挂载的云硬盘同样可以创建快照。快照记录的是某一时刻的块设备状态,文件系统层面可能不一致,重要数据建议先在云服务器内执行 sync。
1275
+ * Create a snapshot
1276
+ * @description Disks attached to a running instance can be snapshotted. A snapshot records the state of the block device at a point in time and may be inconsistent at the file-system level, so run `sync` inside the instance first where the data matters.
1092
1277
  *
1093
- * **系统盘的快照不能用于回滚该系统盘**:回滚要求先从云服务器上卸载,而系统盘不可卸载。它可用于创建一块新的数据盘。需要保留并恢复整个系统时,请使用自制镜像;需要可跨可用区、且在云硬盘删除后仍可恢复的副本时,请使用备份。
1278
+ * **A snapshot of a system disk cannot be used to revert that system disk**: reverting requires the disk to be detached, and a system disk cannot be detached. It can be used to create a new data disk. To preserve and restore an entire system, use a private image; for a copy that crosses availability zones and survives deletion of the disk, use a backup.
1094
1279
  */
1095
1280
  post: operations["create-snapshot"];
1096
1281
  delete?: never;
@@ -1106,15 +1291,15 @@ export interface paths {
1106
1291
  path?: never;
1107
1292
  cookie?: never;
1108
1293
  };
1109
- /** 查看快照 */
1294
+ /** Retrieve a snapshot */
1110
1295
  get: operations["get-snapshot"];
1111
1296
  put?: never;
1112
1297
  post?: never;
1113
- /** 删除快照 */
1298
+ /** Delete a snapshot */
1114
1299
  delete: operations["delete-snapshot"];
1115
1300
  options?: never;
1116
1301
  head?: never;
1117
- /** 重命名快照 */
1302
+ /** Rename a snapshot */
1118
1303
  patch: operations["rename-snapshot"];
1119
1304
  trace?: never;
1120
1305
  };
@@ -1125,6 +1310,10 @@ export interface components {
1125
1310
  Error: {
1126
1311
  code?: string;
1127
1312
  message: string;
1313
+ /**
1314
+ * @description What a given `code` carries alongside the message. The keys depend on the code,
1315
+ * and a client that does not recognise one ignores it.
1316
+ */
1128
1317
  meta?: {
1129
1318
  [key: string]: unknown;
1130
1319
  };
@@ -1132,7 +1321,7 @@ export interface components {
1132
1321
  status: number;
1133
1322
  };
1134
1323
  BackupResource: {
1135
- /** @description 源云硬盘所在的可用区。恢复时可选择本地区的其他可用区 */
1324
+ /** @description Availability zone of the source disk. A restore may target another zone in the same region */
1136
1325
  availability_zone: string;
1137
1326
  /** Format: date-time */
1138
1327
  created_at: string;
@@ -1142,12 +1331,12 @@ export interface components {
1142
1331
  region_code: string;
1143
1332
  /**
1144
1333
  * Format: int64
1145
- * @description 创建备份时源云硬盘的容量。恢复出的云硬盘不能小于此容量
1334
+ * @description Capacity of the source disk when the backup was created. A restored disk cannot be smaller than this
1146
1335
  */
1147
1336
  size_gb: number;
1148
1337
  /**
1149
1338
  * Format: uuid
1150
- * @description 备份来源。该云硬盘删除后本备份仍然可用
1339
+ * @description The disk this backup was taken from. The backup remains usable after that disk is deleted
1151
1340
  */
1152
1341
  source_disk_id: string;
1153
1342
  /** @enum {string} */
@@ -1167,42 +1356,80 @@ export interface components {
1167
1356
  RestoreBackupRequestBody: {
1168
1357
  /**
1169
1358
  * Format: uuid
1170
- * @description 可选择与源云硬盘不同的可用区,但必须在同一地区
1359
+ * @description May differ from the availability zone of the source disk, but must be in the same region. It has to be on sale — restoring creates a new disk, so a withdrawn type is rejected here as well
1171
1360
  */
1172
1361
  disk_type_id: string;
1173
1362
  name: string;
1174
1363
  /**
1175
1364
  * Format: int64
1176
- * @description 留空时与备份等大。给出时不能小于备份
1365
+ * @description Matches the size of the backup when omitted. When given, it must not be smaller than the backup
1177
1366
  */
1178
1367
  size_gb?: number;
1179
1368
  };
1180
1369
  DiskResource: {
1181
1370
  attached_instance_id: string | null;
1182
- /** @description 云硬盘实际所在的可用区。挂载时云服务器必须位于同一可用区 */
1371
+ /** @description Availability zone the disk actually resides in. An instance must be in the same zone to attach it */
1183
1372
  availability_zone: string;
1184
1373
  /** Format: date-time */
1185
1374
  created_at: string;
1186
- /** @description 系统分配的设备名,在云服务器内看到的即为该名称 */
1375
+ /** @description Device name assigned by the system, as seen inside the instance */
1187
1376
  device: string | null;
1188
1377
  /** Format: uuid */
1189
1378
  disk_type_id: string;
1190
1379
  /** Format: uuid */
1191
1380
  id: string;
1192
- /** @description 系统盘随云服务器一并释放,不能卸载也不能单独删除 */
1381
+ /** @description A system disk is released with its instance and can be neither detached nor deleted individually */
1193
1382
  is_system: boolean;
1194
1383
  name: string;
1195
1384
  region_code: string;
1196
1385
  /** Format: int64 */
1197
1386
  size_gb: number;
1387
+ /**
1388
+ * Format: int64
1389
+ * @description IOPS this disk is allowed. Null when its type is not rate-limited.
1390
+ *
1391
+ * Computed from the disk's own capacity, so it grows when the disk is grown — but see the
1392
+ * note on the resize endpoint: growing a disk that is attached is refused, precisely because
1393
+ * the new figure would not take effect until it was attached again.
1394
+ */
1395
+ iops: number | null;
1396
+ /**
1397
+ * Format: int64
1398
+ * @description Throughput this disk is allowed, in bytes per second. Null when its type is not rate-limited
1399
+ */
1400
+ throughput_bytes_per_sec: number | null;
1198
1401
  /** @enum {string} */
1199
1402
  status: "provisioning" | "available" | "attaching" | "in_use" | "detaching" | "resizing" | "reverting" | "restoring" | "releasing" | "deleting" | "error";
1403
+ /**
1404
+ * @description How this disk is paid for. `postpaid` is billed by the hour for as long as it exists;
1405
+ * `prepaid` was bought outright for a term.
1406
+ *
1407
+ * **Not the term.** How long it was bought for belongs to the order, not to the disk:
1408
+ * renewing can change it, and a machine bought for a year and then renewed for a month is
1409
+ * still a prepaid machine. Ask billing for the term and the expiry — they live there, and
1410
+ * they are the only two values a renewal moves.
1411
+ * @enum {string}
1412
+ */
1413
+ charge_type: "postpaid" | "prepaid";
1200
1414
  };
1201
1415
  DiskTypeResource: {
1202
1416
  availability_zone_code: string;
1203
1417
  /** Format: uuid */
1204
1418
  id: string;
1205
- iops_display: string;
1419
+ /**
1420
+ * Format: int64
1421
+ * @description IOPS a disk of `min_size_gb` gets. Null when this type is not rate-limited.
1422
+ *
1423
+ * Performance grows with capacity, so this and `iops_at_max_size` are the two ends of the
1424
+ * range. The exact figure for the size actually bought appears on the disk itself once it
1425
+ * exists.
1426
+ */
1427
+ iops_at_min_size: number | null;
1428
+ /**
1429
+ * Format: int64
1430
+ * @description IOPS a disk of `max_size_gb` gets. Null when this type is not rate-limited
1431
+ */
1432
+ iops_at_max_size: number | null;
1206
1433
  /** Format: int64 */
1207
1434
  max_size_gb: number;
1208
1435
  /** @enum {string} */
@@ -1213,7 +1440,62 @@ export interface components {
1213
1440
  region_code: string;
1214
1441
  /** Format: int64 */
1215
1442
  step_gb: number;
1216
- throughput_display: string;
1443
+ /**
1444
+ * Format: int64
1445
+ * @description Throughput a disk of `min_size_gb` gets, in **bytes per second**. Null when this type is
1446
+ * not rate-limited.
1447
+ *
1448
+ * Bytes rather than MiB so the number needs no rounding on the way out; divide by 1048576
1449
+ * for MiB/s at the point of display.
1450
+ */
1451
+ throughput_at_min_size: number | null;
1452
+ /**
1453
+ * Format: int64
1454
+ * @description Throughput a disk of `max_size_gb` gets, in bytes per second. Null when this type is not rate-limited
1455
+ */
1456
+ throughput_at_max_size: number | null;
1457
+ /**
1458
+ * @description Whether any capacity is left in this type's pool.
1459
+ *
1460
+ * The same shape as on an instance type, but it answers less here: a disk is sold by the
1461
+ * GiB, so "not sold out" does not mean the size being asked for fits. `remaining` is the
1462
+ * field that decides that, and this one only says whether the pool is empty outright.
1463
+ *
1464
+ * It reflects a limit set by operations, not what the storage backend physically has —
1465
+ * raising the limit does not create capacity, and a type that is not sold out can still fail
1466
+ * to create if the backend is full.
1467
+ *
1468
+ * Advisory: it is read when the list is built, and capacity can be taken between that read
1469
+ * and the order. The order is what actually refuses.
1470
+ */
1471
+ sold_out: boolean;
1472
+ /**
1473
+ * Format: int64
1474
+ * @description How much capacity is left, **in GiB**. Absent when this type is not limited at all.
1475
+ *
1476
+ * Unlike an instance type, where this is a count of machines, here it is an amount of
1477
+ * storage — and it is the number that bounds the size a customer may ask for. A picker that
1478
+ * offers sizes above it produces orders that are refused after the customer has chosen
1479
+ * everything else.
1480
+ *
1481
+ * Absent is not zero and not "unknown": a type with no limit simply has no number to show.
1482
+ * Reporting it as a number would need a sentinel, and any sentinel eventually gets compared
1483
+ * against a real size.
1484
+ */
1485
+ remaining?: number;
1486
+ /**
1487
+ * @description What buying this type outright costs, per term. Empty means this type is only sold by the
1488
+ * hour.
1489
+ *
1490
+ * **The amount is per GiB for the whole term**, not the price of one disk: a disk's size is
1491
+ * chosen by the customer, so the total is this figure times the size. That differs from an
1492
+ * instance type, where the same field is the price of one machine — the unit follows what
1493
+ * the product is sold by, and the order is priced the same way.
1494
+ *
1495
+ * Advisory, like `sold_out`: it is read when the list is built. The order is what fixes the
1496
+ * price, and it refuses rather than falling back to hourly if the term is not sold.
1497
+ */
1498
+ prepaid_prices?: components["schemas"]["PrepaidPrice"][];
1217
1499
  };
1218
1500
  DiskTypeListResponseBody: {
1219
1501
  items: components["schemas"]["DiskTypeResource"][] | null;
@@ -1222,6 +1504,8 @@ export interface components {
1222
1504
  architecture: string;
1223
1505
  /** Format: uuid */
1224
1506
  id: string;
1507
+ /** @description The account this image lets you log in as. The password set at creation belongs to this account */
1508
+ login_username: string;
1225
1509
  /** Format: int64 */
1226
1510
  min_disk_gb: number;
1227
1511
  /** Format: int64 */
@@ -1230,19 +1514,53 @@ export interface components {
1230
1514
  os_family: string;
1231
1515
  os_version: string;
1232
1516
  region_code: string;
1233
- /** @description false 表示由该镜像创建的云服务器只能通过重装系统设置新密码 */
1517
+ /** @description False means a new password can only be set by rebuilding an instance created from this image */
1234
1518
  supports_password_reset: boolean;
1235
1519
  };
1236
1520
  ImageListResponseBody: {
1237
1521
  items: components["schemas"]["ImageResource"][] | null;
1238
1522
  };
1523
+ PrepaidPrice: {
1524
+ /**
1525
+ * @description An ISO 8601 duration (P1M, P1Y). A duration rather than a number of months: months are not
1526
+ * the same length, and storing a number leaves whoever reads it to decide what it means.
1527
+ */
1528
+ term: string;
1529
+ /**
1530
+ * @description A decimal string, not a float. Money that survives a round trip through binary floating
1531
+ * point is money that stops adding up.
1532
+ */
1533
+ amount: string;
1534
+ currency: string;
1535
+ };
1239
1536
  InstanceTypeResource: {
1240
- /** @description 该机型所属的可用区。云硬盘必须位于同一可用区才能挂载 */
1537
+ /** @description Availability zone of this instance type. A disk must be in the same zone to be attached */
1241
1538
  availability_zone_code: string;
1242
1539
  /** Format: uuid */
1243
1540
  id: string;
1244
- /** Format: int64 */
1541
+ /**
1542
+ * Format: int64
1543
+ * @description The most public bandwidth a machine of this type may be given, in Mbps. Asking for more
1544
+ * when creating a machine, or raising a bound address past it, is refused.
1545
+ *
1546
+ * A ceiling on what can be bought, not a speed. How fast the machine's own interfaces run is
1547
+ * `network_egress_kbps` / `network_ingress_kbps`.
1548
+ */
1245
1549
  max_bandwidth_mbps: number;
1550
+ /**
1551
+ * Format: int64
1552
+ * @description Outbound ceiling of **each** network interface, in kbps. Null when this type is not
1553
+ * rate-limited.
1554
+ *
1555
+ * Per interface rather than per machine: a machine with two interfaces has this ceiling on
1556
+ * each of them, not shared between them. `max_ports` says how many it may have.
1557
+ */
1558
+ network_egress_kbps: number | null;
1559
+ /**
1560
+ * Format: int64
1561
+ * @description Inbound ceiling of each network interface, in kbps. Null when this type is not rate-limited
1562
+ */
1563
+ network_ingress_kbps: number | null;
1246
1564
  /** Format: int64 */
1247
1565
  max_floating_ips: number;
1248
1566
  /** Format: int64 */
@@ -1253,6 +1571,39 @@ export interface components {
1253
1571
  region_code: string;
1254
1572
  /** Format: int64 */
1255
1573
  vcpus: number;
1574
+ /**
1575
+ * @description Whether this type can be ordered right now.
1576
+ *
1577
+ * It reflects a limit set by operations, not what the cloud can physically schedule — raising
1578
+ * the limit does not create capacity that is not there, and a type that is not sold out can
1579
+ * still fail to start if the zone is full.
1580
+ *
1581
+ * It is advisory: it is read when the list is built, and the last one can be taken between
1582
+ * that read and the order. The order is what actually refuses.
1583
+ */
1584
+ sold_out: boolean;
1585
+ /**
1586
+ * Format: int64
1587
+ * @description How many more may be created. Absent when this type is not limited at all.
1588
+ *
1589
+ * Absent is not zero and not "unknown": a type with no limit simply has no number to show.
1590
+ * Reporting it as a number would need a sentinel, and any sentinel eventually gets compared
1591
+ * against a real count.
1592
+ */
1593
+ remaining?: number;
1594
+ /**
1595
+ * @description What buying this type outright costs, per term. Empty means this type is only sold by the
1596
+ * hour.
1597
+ *
1598
+ * The hourly price is not here and is not missing: it is made of finer parts than the type
1599
+ * (cores and memory are priced separately, and the type itself does not appear in the rate
1600
+ * card at all), so there is no single number to show. A term price is one number because a
1601
+ * term is one purchase.
1602
+ *
1603
+ * Advisory, like `sold_out`: it is read when the list is built. The order is what fixes the
1604
+ * price, and it refuses rather than falling back to hourly if the term is not sold.
1605
+ */
1606
+ prepaid_prices?: components["schemas"]["PrepaidPrice"][];
1256
1607
  };
1257
1608
  InstanceTypeListResponseBody: {
1258
1609
  items: components["schemas"]["InstanceTypeResource"][] | null;
@@ -1276,16 +1627,68 @@ export interface components {
1276
1627
  items: components["schemas"]["DiskResource"][] | null;
1277
1628
  };
1278
1629
  CreateDiskRequestBody: {
1279
- /** Format: uuid */
1630
+ /**
1631
+ * @description A promotion code to apply to this order. Case and surrounding whitespace do not matter.
1632
+ *
1633
+ * An unusable code is rejected outright rather than quietly ignored: somebody who typed a
1634
+ * code is buying at the discounted price, and letting it through silently means they pay
1635
+ * full price expecting the discount, with nothing anywhere saying so.
1636
+ *
1637
+ * The discount applies to the lines the campaign covers, not the whole order — typically
1638
+ * the instance type and memory, not the system disk, the address, or traffic. Preview it
1639
+ * first at `POST /account/v1/billing-accounts/{accountKey}/promotion-codes/preview` to
1640
+ * show the customer what will actually be charged.
1641
+ *
1642
+ * Metered orders reject any code: there is no amount to discount at this point.
1643
+ */
1644
+ promotion_code?: string;
1645
+ /**
1646
+ * @description "This is the same click". Generate one when the dialog opens — not when it is submitted —
1647
+ * and send the same one on every retry of that action.
1648
+ *
1649
+ * Optional, and what happens without it is worth knowing: two identical requests inside the
1650
+ * same minute are treated as one, because there is nothing else to tell a double-click apart
1651
+ * from a deliberate second order. Sending your own key removes that guess entirely.
1652
+ */
1653
+ idempotency_key?: string;
1654
+ /**
1655
+ * Format: uuid
1656
+ * @description A disk type currently on sale. A withdrawn one is rejected even though its identifier still resolves
1657
+ */
1280
1658
  disk_type_id: string;
1281
1659
  name: string;
1282
1660
  /** Format: int64 */
1283
1661
  size_gb: number;
1284
1662
  /**
1285
1663
  * Format: uuid
1286
- * @description 从该快照恢复。提供时容量只需不小于快照本身
1664
+ * @description Restore from this snapshot. When given, the capacity need only be no smaller than the snapshot
1287
1665
  */
1288
1666
  snapshot_id?: string;
1667
+ /**
1668
+ * @description Buy the disk outright for this long, as an ISO 8601 duration (P1M, P1Y). Billed by the
1669
+ * hour when omitted.
1670
+ *
1671
+ * A disk bought outright can still be expanded: the difference is prorated over the days
1672
+ * left in the term, and the expiry date does not move. It is stopped, not deleted, when the
1673
+ * term runs out — the data stays and comes back once renewed.
1674
+ */
1675
+ term?: string;
1676
+ /**
1677
+ * @description How to pay for a term bought outright. Only meaningful together with `term`.
1678
+ *
1679
+ * `balance` takes it from the account balance and either succeeds or refuses on the spot.
1680
+ * `online` returns a `checkout_url` instead and **creates nothing** — the resource is only
1681
+ * created once the money arrives and the customer comes back to place it again. That last
1682
+ * part is deliberate: a successful payment should not silently turn into a machine, because
1683
+ * between paying and returning they may have changed their mind.
1684
+ *
1685
+ * Online payment is not a second wallet. What arrives lands in the balance first and the
1686
+ * order is settled from there, so money topped up and money paid at checkout are the same
1687
+ * pool.
1688
+ * @default balance
1689
+ * @enum {string}
1690
+ */
1691
+ payment_method?: "balance" | "online";
1289
1692
  };
1290
1693
  RenameDiskRequestBody: {
1291
1694
  name: string;
@@ -1293,14 +1696,14 @@ export interface components {
1293
1696
  ResizeDiskRequestBody: {
1294
1697
  /**
1295
1698
  * Format: int64
1296
- * @description 必须大于当前容量
1699
+ * @description Must be larger than the current capacity
1297
1700
  */
1298
1701
  size_gb: number;
1299
1702
  };
1300
1703
  RevertDiskRequestBody: {
1301
1704
  /**
1302
1705
  * Format: uuid
1303
- * @description 必须是该云硬盘最新的一个快照
1706
+ * @description Must be the most recent snapshot of the disk
1304
1707
  */
1305
1708
  snapshot_id: string;
1306
1709
  };
@@ -1318,7 +1721,7 @@ export interface components {
1318
1721
  id: string;
1319
1722
  region_code: string;
1320
1723
  /**
1321
- * @description idle 表示尚未绑定到网卡
1724
+ * @description `idle` means the address is not bound to a network interface
1322
1725
  * @enum {string}
1323
1726
  */
1324
1727
  status: "idle" | "bound";
@@ -1327,15 +1730,27 @@ export interface components {
1327
1730
  items: components["schemas"]["FloatingIPResource"][] | null;
1328
1731
  };
1329
1732
  AllocateFloatingIPRequestBody: {
1330
- /** @description 指定要申领的地址。留空时由平台自动分配 */
1733
+ /** @description The address to allocate. Allocated by the platform when omitted */
1331
1734
  address?: string;
1735
+ /**
1736
+ * Format: int64
1737
+ * @description The bandwidth ceiling of this address, in Mbit/s, applied to both directions.
1738
+ *
1739
+ * Required, and there is no "unlimited": an address with no ceiling runs at line rate and is
1740
+ * charged nothing for the traffic, while the address itself bills normally — so the invoice
1741
+ * looks correct and nothing anywhere reports it.
1742
+ *
1743
+ * It is billed separately from the address, per Mbit/s-hour, and appears as its own line on
1744
+ * the order. Changing it later goes through the bandwidth endpoint.
1745
+ */
1746
+ bandwidth_mbps: number;
1332
1747
  /** Format: uuid */
1333
1748
  private_network_id: string;
1334
1749
  };
1335
1750
  SetBandwidthRequestBody: {
1336
1751
  /**
1337
1752
  * Format: int64
1338
- * @description 出入方向均限制为该值
1753
+ * @description Applied to both directions
1339
1754
  */
1340
1755
  mbps: number;
1341
1756
  };
@@ -1347,154 +1762,367 @@ export interface components {
1347
1762
  availability_zone: string;
1348
1763
  /** Format: date-time */
1349
1764
  created_at: string;
1350
- /** @description 云服务器内的主机名,等于云服务器 id */
1765
+ /** @description Hostname inside the instance; equals the instance id */
1351
1766
  hostname: string;
1352
1767
  /** Format: uuid */
1353
1768
  id: string;
1354
1769
  /**
1355
1770
  * Format: uuid
1356
- * @description 从平台提供的镜像创建时非空
1771
+ * @description Non-empty when the instance was created from a disk you already had, instead of from an image
1772
+ */
1773
+ boot_disk_id: string | null;
1774
+ /**
1775
+ * Format: uuid
1776
+ * @description Non-empty when the instance was created from a platform image
1357
1777
  */
1358
1778
  image_id: string | null;
1359
1779
  /**
1360
1780
  * Format: uuid
1361
- * @description 当前生效的机型,即当前计费依据
1781
+ * @description The instance type in effect, and the basis for billing
1362
1782
  */
1363
1783
  instance_type_id: string;
1364
- /** @description 云服务器主网卡的 IPv6 地址。私有网络启用 IPv6 后自动下发 */
1784
+ /** @description IPv6 address of the primary network interface. Assigned automatically once IPv6 is enabled on the private network */
1365
1785
  ipv6_address: string | null;
1786
+ /** @description Your own classification of this instance, as key-value pairs. Empty when never set */
1787
+ labels: {
1788
+ [key: string]: string;
1789
+ };
1790
+ /** @description The account to log in as over SSH. The password set at creation belongs to this account */
1791
+ login_username: string;
1366
1792
  name: string;
1793
+ /** @description A free-text note about this instance. Empty when never set */
1794
+ notes: string;
1367
1795
  /**
1368
1796
  * Format: uuid
1369
- * @description 非空表示存在待确认的变配。确认后该机型生效,回滚则丢弃
1797
+ * @description Non-empty while a resize awaits confirmation. Confirming puts this type into effect, reverting discards it
1370
1798
  */
1371
1799
  pending_instance_type_id: string | null;
1372
1800
  /**
1373
1801
  * Format: uuid
1374
- * @description 从自制的私有镜像创建时非空
1802
+ * @description Non-empty when the instance was created from a private image
1375
1803
  */
1376
1804
  private_image_id: string | null;
1377
- /** @description 云服务器的内网地址 */
1805
+ /** @description Private address of the instance */
1378
1806
  private_ip: string | null;
1379
- /** @description 云服务器主网卡所在的私有网络 */
1807
+ /** @description Private network of the primary network interface */
1380
1808
  private_network_id: string | null;
1381
- /** @description 云服务器主网卡上绑定的公网 IPv4,未绑定时为空数组 */
1809
+ /** @description Floating IPv4 addresses bound to the primary network interface; an empty array when none are bound */
1382
1810
  public_ips: string[] | null;
1383
1811
  region_code: string;
1384
- /** @enum {string} */
1385
- status: "provisioning" | "running" | "stopped" | "rebooting" | "resizing" | "resize_verifying" | "error" | "deleting" | "suspended";
1386
- /** @description 云服务器主网卡所在的子网 */
1812
+ /**
1813
+ * @description Only `running` and `stopped` accept commands. Every other value means the instance is changing, and start, stop, reboot, resize, rebuild and password reset are all rejected.
1814
+ *
1815
+ * `transitioning` is the fallback for a change that falls into none of the categories above. It does not indicate an error; keep polling.
1816
+ *
1817
+ * `resize_verifying` is not transient: the instance is running on the new size and stays there until the resize is confirmed or reverted, with both sizes billed in the meantime.
1818
+ * @enum {string}
1819
+ */
1820
+ status: "provisioning" | "running" | "stopped" | "starting" | "stopping" | "rebooting" | "transitioning" | "resizing" | "resize_verifying" | "error" | "deleting" | "suspended";
1821
+ /** @description Subnet of the primary network interface */
1387
1822
  subnet_id: string | null;
1388
1823
  /**
1389
1824
  * Format: date-time
1390
- * @description 非空表示已被平台停服,需先解除后才能操作
1825
+ * @description Non-empty once the platform has suspended the instance, which must be lifted before any operation
1391
1826
  */
1392
1827
  suspended_at: string | null;
1393
1828
  /** Format: date-time */
1394
1829
  updated_at: string;
1830
+ /**
1831
+ * @description How this instance is paid for. `postpaid` is billed by the hour for as long as it exists;
1832
+ * `prepaid` was bought outright for a term.
1833
+ *
1834
+ * **Not the term.** How long it was bought for belongs to the order, not to the instance:
1835
+ * renewing can change it, and a machine bought for a year and then renewed for a month is
1836
+ * still a prepaid machine. Ask billing for the term and the expiry — they live there, and
1837
+ * they are the only two values a renewal moves.
1838
+ * @enum {string}
1839
+ */
1840
+ charge_type: "postpaid" | "prepaid";
1841
+ /**
1842
+ * @description The order this instance was bought under, in billing's own identifiers. Empty when the
1843
+ * deployment has no billing wired in.
1844
+ *
1845
+ * Kept so the question can be answered later. "Why was I charged for this" is asked days
1846
+ * after the fact, and an order id handed back only in the launch response is one the
1847
+ * person who needs it never had.
1848
+ */
1849
+ billing_order_id: string;
1395
1850
  };
1396
1851
  InstanceListResponseBody: {
1397
1852
  items: components["schemas"]["InstanceResource"][] | null;
1398
1853
  };
1399
1854
  LaunchInstanceRequestBody: {
1855
+ /**
1856
+ * @description A promotion code to apply to this order. Case and surrounding whitespace do not matter.
1857
+ *
1858
+ * An unusable code is rejected outright rather than quietly ignored: somebody who typed a
1859
+ * code is buying at the discounted price, and letting it through silently means they pay
1860
+ * full price expecting the discount, with nothing anywhere saying so.
1861
+ *
1862
+ * The discount applies to the lines the campaign covers, not the whole order — typically
1863
+ * the instance type and memory, not the system disk, the address, or traffic. Preview it
1864
+ * first at `POST /account/v1/billing-accounts/{accountKey}/promotion-codes/preview` to
1865
+ * show the customer what will actually be charged.
1866
+ *
1867
+ * Metered orders reject any code: there is no amount to discount at this point.
1868
+ */
1869
+ promotion_code?: string;
1870
+ /**
1871
+ * @description "This is the same click". Generate one when the dialog opens — not when it is submitted —
1872
+ * and send the same one on every retry of that action.
1873
+ *
1874
+ * Optional, and what happens without it is worth knowing: two identical requests inside the
1875
+ * same minute are treated as one, because there is nothing else to tell a double-click apart
1876
+ * from a deliberate second order. Sending your own key removes that guess entirely.
1877
+ */
1878
+ idempotency_key?: string;
1879
+ /**
1880
+ * Format: uuid
1881
+ * @description Bind a floating IP you already hold, instead of allocating a new one. It must be idle and in
1882
+ * the same region.
1883
+ *
1884
+ * Mutually exclusive with `bandwidth_mbps`: an address you already hold has its own bandwidth
1885
+ * ceiling, set when it was allocated, and changing it is a separate operation.
1886
+ *
1887
+ * Like `bandwidth_mbps`, this happens **inside the creation**: if binding fails, no instance is
1888
+ * created. Binding afterwards is still possible from the instance page, but then it is two
1889
+ * operations and a failure in between leaves an instance you cannot reach.
1890
+ *
1891
+ * Only one instance can be created when it is used — one address binds to one interface.
1892
+ */
1893
+ floating_ip_id?: string;
1894
+ /**
1895
+ * Format: int64
1896
+ * @description Give this instance a public address with this much bandwidth, in Mbit/s. Omitted or 0 means
1897
+ * no public address.
1898
+ *
1899
+ * Mutually exclusive with `floating_ip_id`, which binds one you already hold.
1900
+ *
1901
+ * The bandwidth is what says whether an address is wanted, rather than a separate flag,
1902
+ * because an address with no ceiling would run at line rate and be charged nothing for the
1903
+ * traffic — while the address itself bills normally and the invoice looks correct.
1904
+ *
1905
+ * The address and its bandwidth are two lines on the same order as the instance and its
1906
+ * system disk — one purchase with one total — and everything is created together or not at
1907
+ * all: if any step fails, the address goes back to the pool and no instance is created.
1908
+ * Asking for an address separately afterwards is still possible, but then they are separate
1909
+ * purchases, and a failure in between leaves an instance you cannot reach.
1910
+ *
1911
+ * Both lines are always billed by the hour, even when the instance is bought outright for a
1912
+ * term: a public IPv4 is a scarce resource the platform keeps holding for as long as you have
1913
+ * it, so it is not something that can be paid for once.
1914
+ *
1915
+ * Which address you get is not a choice here. Use the floating IP endpoints to claim a
1916
+ * particular address and bind it, which is what getting a known address back after a
1917
+ * migration needs.
1918
+ *
1919
+ * Rejected together with `port_id` when that interface already has a floating IP: an
1920
+ * interface carries one IPv4, and one IPv4 takes one floating IP. Attach another interface to
1921
+ * hold a second address.
1922
+ */
1923
+ bandwidth_mbps?: number;
1400
1924
  /**
1401
1925
  * Format: int64
1402
- * @description 一次创建的台数,留空为 1。多台时名称自动编号
1926
+ * @description Number of instances to create; 1 when omitted. Names are numbered automatically for several
1403
1927
  */
1404
1928
  count?: number;
1405
- /** @description 由平台生成随机密码,仅在本次响应中返回 */
1929
+ /** @description Have the platform generate a random password, returned only in this response */
1406
1930
  generate_password?: boolean;
1407
1931
  /**
1408
1932
  * Format: uuid
1409
- * @description 平台提供的镜像。与 private_image_id 二选一
1933
+ * @description Boot a disk you already have instead of installing an image. The disk must be available, unattached, and in the same availability zone as the instance type. Exactly one of this, `image_id` and `private_image_id`
1934
+ */
1935
+ boot_disk_id?: string;
1936
+ /**
1937
+ * Format: uuid
1938
+ * @description A platform image, and it must be one currently on sale. Exactly one of this, `private_image_id` and `boot_disk_id`
1410
1939
  */
1411
1940
  image_id?: string;
1412
- /** Format: uuid */
1941
+ /**
1942
+ * Format: uuid
1943
+ * @description An instance type currently on sale. A withdrawn one is rejected even though its identifier still resolves
1944
+ */
1413
1945
  instance_type_id: string;
1946
+ /** @description The account the disk lets you log in as. Required with `boot_disk_id`, and rejected without it since an image states its own */
1947
+ login_username?: string;
1414
1948
  name: string;
1415
- /** @description root 的登录密码。留空时仅使用项目的 SSH 公钥 */
1949
+ /** @description The password to set, on the login account and on root. Only the SSH public keys of the project are used when omitted */
1416
1950
  password?: string;
1417
1951
  /**
1418
1952
  * Format: uuid
1419
- * @description 使用已有网卡(可预先绑定公网 IP)。与 subnet_id 二选一;使用时只能创建一台
1953
+ * @description Use an existing network interface, which may already have a floating IP bound. Exactly one of this and `subnet_id`; only one instance can be created when it is used
1420
1954
  */
1421
1955
  port_id?: string;
1422
1956
  /**
1423
1957
  * Format: uuid
1424
- * @description 自制镜像。与 image_id 二选一
1958
+ * @description A private image. Exactly one of this, `image_id` and `boot_disk_id`
1425
1959
  */
1426
1960
  private_image_id?: string;
1961
+ /**
1962
+ * @description How to pay for a term bought outright. Only meaningful together with `term`.
1963
+ *
1964
+ * `balance` takes it from the account balance and either succeeds or refuses on the spot.
1965
+ * `online` returns a `checkout_url` instead and **creates nothing** — the resource is only
1966
+ * created once the money arrives and the customer comes back to place it again. That last
1967
+ * part is deliberate: a successful payment should not silently turn into a machine, because
1968
+ * between paying and returning they may have changed their mind.
1969
+ *
1970
+ * Online payment is not a second wallet. What arrives lands in the balance first and the
1971
+ * order is settled from there, so money topped up and money paid at checkout are the same
1972
+ * pool.
1973
+ * @default balance
1974
+ * @enum {string}
1975
+ */
1976
+ payment_method?: "balance" | "online";
1977
+ /**
1978
+ * @description Buy the instance outright for this long, as an ISO 8601 duration (P1M, P1Y). Billed by the
1979
+ * hour when omitted.
1980
+ *
1981
+ * The money is taken from the balance when the order is placed, at the price the catalogue
1982
+ * reported for this type and term. If that term is not on sale for this type the request is
1983
+ * refused — it is never quietly sold by the hour instead, because the customer who asked for
1984
+ * a year would find out only from the bill.
1985
+ *
1986
+ * The system disk is bought for the same term, because it is the same purchase: an instance
1987
+ * bought for a year whose disk is billed hourly is a bill nobody would predict from what they
1988
+ * clicked. A term is therefore refused together with `boot_disk_id`, where the disk already
1989
+ * exists and is already billed its own way.
1990
+ *
1991
+ * A public address asked for with `assign_public_ip` stays hourly regardless — it cannot be
1992
+ * bought outright — so one order can carry both.
1993
+ *
1994
+ * When the term runs out the instance is stopped, not deleted, and starts again once it is
1995
+ * renewed. Renewal lives in the billing console, across every product, because what a
1996
+ * customer needs to see is everything expiring this month rather than one product at a time.
1997
+ */
1998
+ term?: string;
1427
1999
  /**
1428
2000
  * Format: int64
1429
- * @description 系统盘容量(GB)。留空时按镜像要求与平台下限自动选择
2001
+ * @description System disk capacity in GB. Chosen automatically from the requirement of the image and the platform minimum when omitted. Ignored with `boot_disk_id`, since that disk already has its capacity
1430
2002
  */
1431
2003
  root_disk_gb?: number;
1432
- /** @description 新建主网卡时必填,至少一个;不会自动使用默认安全组。使用 port_id 时忽略——那张网卡的安全组在创建它时已经定了 */
2004
+ /** @description Required when a primary network interface is created, at least one; the default security group is not applied automatically. Ignored together with `port_id`, as the security groups of that interface were fixed when it was created */
1433
2005
  security_group_ids?: string[] | null;
1434
2006
  /**
1435
2007
  * Format: uuid
1436
- * @description 在该子网内新建主网卡。与 port_id 二选一
2008
+ * @description Create the primary network interface in this subnet. Exactly one of this and `port_id`
1437
2009
  */
1438
2010
  subnet_id?: string;
1439
2011
  };
1440
2012
  LaunchInstanceResponseBody: {
1441
- /** @description 非空表示只成功创建了部分云服务器,其余因该原因中止 */
2013
+ /**
2014
+ * @description The orders these instances were bought under, in the same order as `instances`.
2015
+ *
2016
+ * **One per instance, not one per request.** A batch of three places three orders, because
2017
+ * each machine is ordered as it is created — stopping halfway leaves the machines already
2018
+ * made, and they each have to be paid for. A caller showing "your order" for a batch has to
2019
+ * show all of them.
2020
+ *
2021
+ * Empty when the deployment has no billing wired in, and on the `checkout_url` branch where
2022
+ * nothing was created yet.
2023
+ *
2024
+ * Given so the caller can point at the transaction. Creating a resource takes money — by
2025
+ * the hour from that moment for a metered one, in full from the balance for a prepaid one —
2026
+ * and until now the only thing handed back was the resource itself. Somebody asking "why
2027
+ * was I charged" had nothing to open.
2028
+ */
2029
+ order_ids?: string[] | null;
2030
+ /** @description Non-empty when only some of the instances were created, stating why the sequence stopped */
1442
2031
  failure: string | null;
1443
- /** @description 按请求顺序返回,单台创建时也是数组 */
2032
+ /** @description Returned in request order; an array even for a single instance */
1444
2033
  instances: components["schemas"]["InstanceResource"][] | null;
1445
- /** @description 仅在本次响应中返回,请及时保存。批量创建时所有云服务器共用它 */
2034
+ /** @description Returned only in this response; store it immediately. All instances of a batch share it */
1446
2035
  password: string;
2036
+ /**
2037
+ * @description Present only when `payment_method` was `online`: **nothing was created**. Send the
2038
+ * customer here to pay.
2039
+ *
2040
+ * What comes back is not a resource but a bill to settle. Treating this response as a
2041
+ * success and moving on is how something gets handed over without the money arriving —
2042
+ * and it looks exactly like a normal creation from the outside.
2043
+ */
2044
+ checkout_url?: string;
2045
+ };
2046
+ SetInstanceLabelsRequestBody: {
2047
+ /** @description The complete set of labels. Whatever is absent here is removed; send an empty object to clear them all. A key may not contain a colon, whitespace or control characters */
2048
+ labels: {
2049
+ [key: string]: string;
2050
+ };
2051
+ };
2052
+ SetInstanceNotesRequestBody: {
2053
+ /** @description The complete note. Send an empty string to clear it */
2054
+ notes: string;
1447
2055
  };
1448
2056
  RenameInstanceRequestBody: {
1449
2057
  name: string;
1450
2058
  };
1451
- ActOnInstanceRequestBody: {
1452
- /** @enum {string} */
1453
- action: "start" | "stop" | "reboot";
1454
- /** @description 仅适用于 reboot。强制重启不等待操作系统正常关闭,未落盘的数据会丢失,用于系统已无响应的情况 */
2059
+ RebootInstanceRequestBody: {
2060
+ /** @description A forced reboot does not wait for the operating system to shut down and unwritten data is lost; use it when the system is unresponsive. False when omitted */
1455
2061
  force?: boolean;
1456
2062
  };
2063
+ RunCommandRequestBody: {
2064
+ /** @description Run by the login shell, so pipes, redirection and `&&` work. It cannot read standard input */
2065
+ command: string;
2066
+ /**
2067
+ * Format: int64
2068
+ * @description Kill the command after this long. 60 when omitted
2069
+ */
2070
+ timeout_seconds?: number;
2071
+ };
2072
+ CommandResultResponseBody: {
2073
+ /**
2074
+ * Format: int64
2075
+ * @description What the command exited with, 0 being success. Any other value is the command's own verdict and still arrives as a 200. Null when it was killed rather than exiting on its own, which includes the timeout — null is the absence of a verdict, not a successful one
2076
+ */
2077
+ exit_code: number | null;
2078
+ stderr: string;
2079
+ stdout: string;
2080
+ /** @description True when the command was still running at the timeout and was killed */
2081
+ timed_out: boolean;
2082
+ /** @description True when either stream hit the 1 MiB cap and the rest was discarded */
2083
+ truncated: boolean;
2084
+ };
1457
2085
  ConsoleResponseBody: {
1458
- /** @description 远程控制台的连接地址,一次性使用且数分钟后失效 */
2086
+ /** @description Connection address of the remote console; single-use and expires within minutes */
1459
2087
  console_url: string;
1460
2088
  };
1461
2089
  ConsoleOutputResponseBody: {
1462
- /** @description 串口输出的原始文本,行序与云服务器内一致 */
2090
+ /** @description Raw text of the console output, in the same line order as inside the instance */
1463
2091
  output: string;
1464
2092
  };
1465
2093
  ResetPasswordRequestBody: {
1466
- /** @description 由平台生成随机密码,仅在本次响应中返回 */
2094
+ /** @description Have the platform generate a random password, returned only in this response */
1467
2095
  generate_password?: boolean;
1468
- /** @description 新的 root 密码。与 generate_password 二选一 */
2096
+ /** @description New root password. Exactly one of this and `generate_password` */
1469
2097
  password?: string;
1470
2098
  };
1471
2099
  ResetPasswordResponseBody: {
1472
- /** @description 平台生成的密码,仅本次返回。自行设置密码时为空 */
2100
+ /** @description The password generated by the platform, returned only in this response. Empty when the password was supplied in the request */
1473
2101
  password: string;
1474
2102
  };
1475
2103
  RebuildInstanceRequestBody: {
1476
2104
  generate_password?: boolean;
1477
2105
  /**
1478
2106
  * Format: uuid
1479
- * @description 平台提供的镜像。与 private_image_id 二选一
2107
+ * @description A platform image, which must be on sale unless it is the one this instance already runs. Exactly one of this and `private_image_id`
1480
2108
  */
1481
2109
  image_id?: string;
1482
2110
  password?: string;
1483
2111
  /**
1484
2112
  * Format: uuid
1485
- * @description 自制镜像。与 image_id 二选一
2113
+ * @description A private image. Exactly one of this and `image_id`
1486
2114
  */
1487
2115
  private_image_id?: string;
1488
2116
  };
1489
2117
  RebuildInstanceResponseBody: {
1490
2118
  instance: components["schemas"]["InstanceResource"];
1491
- /** @description 仅在本次响应中返回,请及时保存 */
2119
+ /** @description Returned only in this response; store it immediately */
1492
2120
  password: string;
1493
2121
  };
1494
2122
  ResizeInstanceRequestBody: {
1495
2123
  /**
1496
2124
  * Format: uuid
1497
- * @description 必须与当前机型位于同一地区和可用区
2125
+ * @description Must be in the same region and availability zone as the current instance type
1498
2126
  */
1499
2127
  instance_type_id: string;
1500
2128
  };
@@ -1511,14 +2139,14 @@ export interface components {
1511
2139
  /** Format: uuid */
1512
2140
  id: string;
1513
2141
  ipv6_address: string | null;
1514
- /** @description 主网卡随云服务器一并创建和释放,不可单独卸载 */
2142
+ /** @description A primary network interface is created and released with its instance and cannot be detached individually */
1515
2143
  is_primary: boolean;
1516
2144
  mac: string | null;
1517
2145
  name: string;
1518
2146
  private_ip: string | null;
1519
2147
  /** Format: uuid */
1520
2148
  private_network_id: string;
1521
- /** @description 绑在这张网卡上的公网 IPv4,未绑定时为空数组 */
2149
+ /** @description Floating IPv4 addresses bound to this network interface; an empty array when none are bound */
1522
2150
  public_ips: string[] | null;
1523
2151
  /** Format: uuid */
1524
2152
  subnet_id: string;
@@ -1531,24 +2159,30 @@ export interface components {
1531
2159
  port_id: string;
1532
2160
  };
1533
2161
  OperationLogResource: {
1534
- /** @description 操作名,与接口的 operation id 一致 */
2162
+ /** @description Name of the operation; matches the operation id of the endpoint */
1535
2163
  action: string;
1536
- /** @description 发起该操作的用户。平台执行时为空 */
2164
+ /** @description The user who initiated the operation. Empty when the platform performed it */
1537
2165
  actor: string | null;
1538
- /** @description true 表示由平台代为执行 */
2166
+ /**
2167
+ * @description The name this user went by at the time of the operation, recorded alongside the operation itself. It is not refreshed afterwards: the record states who acted then, and a name read today is a statement about a different moment.
2168
+ *
2169
+ * Null on entries recorded before this field existed, and on entries performed by the platform. An empty string means the account had no name recorded.
2170
+ */
2171
+ actor_name: string | null;
2172
+ /** @description True when the operation was performed by the platform */
1539
2173
  by_platform: boolean;
1540
2174
  /** Format: date-time */
1541
2175
  created_at: string;
1542
- /** @description 失败时的简要原因 */
2176
+ /** @description Brief reason for the failure */
1543
2177
  failure: string | null;
1544
2178
  /** Format: uuid */
1545
2179
  id: string;
1546
- /** @description 该次请求的路径与查询参数。密码一类的字段已被隐去 */
2180
+ /** @description Path and query parameters of the request. Fields such as passwords are redacted */
1547
2181
  payload: {
1548
2182
  [key: string]: unknown;
1549
2183
  };
1550
2184
  region_code: string | null;
1551
- /** @description 创建类操作为空:新资源的 id 在响应中,不在请求路径上 */
2185
+ /** @description Empty for create operations: the id of the new resource is in the response, not in the request path */
1552
2186
  subject_id: string;
1553
2187
  subject_type: string;
1554
2188
  succeeded: boolean;
@@ -1560,9 +2194,9 @@ export interface components {
1560
2194
  };
1561
2195
  CreatePortRequestBody: {
1562
2196
  name?: string;
1563
- /** @description 指定私网地址。留空时自动分配 */
2197
+ /** @description The private address to assign. Allocated automatically when omitted */
1564
2198
  private_ip?: string;
1565
- /** @description 至少一个,且必须属于同一个私有网络 */
2199
+ /** @description At least one, and all must belong to the same private network */
1566
2200
  security_group_ids: string[] | null;
1567
2201
  /** Format: uuid */
1568
2202
  subnet_id: string;
@@ -1571,38 +2205,40 @@ export interface components {
1571
2205
  architecture: string;
1572
2206
  /** Format: date-time */
1573
2207
  created_at: string;
1574
- /** @description 制作失败的原因,仅在 status 为 error 时非空 */
2208
+ /** @description Reason the capture failed; non-empty only when `status` is `error` */
1575
2209
  failure: string | null;
1576
2210
  /** Format: uuid */
1577
2211
  id: string;
2212
+ /** @description The account this image lets you log in as. The password set at creation belongs to this account */
2213
+ login_username: string;
1578
2214
  /**
1579
2215
  * Format: int64
1580
- * @description 使用本镜像创建云服务器时,系统盘不能小于此容量
2216
+ * @description The system disk of an instance created from this image cannot be smaller than this
1581
2217
  */
1582
2218
  min_disk_gb: number;
1583
2219
  /**
1584
2220
  * Format: int64
1585
- * @description 使用本镜像创建云服务器时,机型内存不能小于此容量
2221
+ * @description The instance type of an instance created from this image must have at least this much memory
1586
2222
  */
1587
2223
  min_ram_mb: number;
1588
2224
  name: string;
1589
2225
  os_family: string;
1590
2226
  os_version: string;
1591
- /** @description 镜像只能用于所在地区 */
2227
+ /** @description An image can only be used in the region that holds it */
1592
2228
  region_code: string;
1593
2229
  /**
1594
2230
  * Format: int64
1595
- * @description 镜像占用的存储容量,制作完成前为 0
2231
+ * @description Storage occupied by the image; 0 until the capture completes
1596
2232
  */
1597
2233
  size_bytes: number;
1598
2234
  /**
1599
2235
  * Format: uuid
1600
- * @description 制作来源。该云服务器释放后本镜像仍然可用
2236
+ * @description The instance this image was captured from. The image remains usable after that instance is released
1601
2237
  */
1602
2238
  source_instance_id: string | null;
1603
2239
  /** @enum {string} */
1604
2240
  status: "provisioning" | "uploading" | "available" | "deleting" | "error";
1605
- /** @description false 表示由该镜像创建的云服务器只能通过重装系统设置新密码 */
2241
+ /** @description False means a new password can only be set by rebuilding an instance created from this image */
1606
2242
  supports_password_reset: boolean;
1607
2243
  };
1608
2244
  PrivateImageListResponseBody: {
@@ -1611,7 +2247,7 @@ export interface components {
1611
2247
  CreatePrivateImageRequestBody: {
1612
2248
  /**
1613
2249
  * Format: uuid
1614
- * @description 制作依据其系统盘,数据盘不包含在内
2250
+ * @description Captured from the system disk of this instance; data disks are not included
1615
2251
  */
1616
2252
  instance_id: string;
1617
2253
  name: string;
@@ -1637,7 +2273,7 @@ export interface components {
1637
2273
  items: components["schemas"]["PrivateNetworkResource"][] | null;
1638
2274
  };
1639
2275
  CreatePrivateNetworkRequestBody: {
1640
- /** @description 必须是 RFC1918 的私有网段,掩码在 /8 到 /24 之间,例如 10.0.0.0/16 */
2276
+ /** @description Must be an RFC 1918 private CIDR with a prefix length between /8 and /24, for example `10.0.0.0/16` */
1641
2277
  cidr: string;
1642
2278
  name: string;
1643
2279
  region_code: string;
@@ -1646,11 +2282,11 @@ export interface components {
1646
2282
  name: string;
1647
2283
  };
1648
2284
  IPv6ResponseBody: {
1649
- /** @description 已分配的 /64 前缀,未启用时为空 */
2285
+ /** @description The allocated /64 prefix; empty while IPv6 is disabled */
1650
2286
  cidr: string;
1651
2287
  enabled: boolean;
1652
2288
  /**
1653
- * @description 为 active 时表示 IPv6 已完全可用
2289
+ * @description `active` means IPv6 is fully available
1654
2290
  * @enum {string}
1655
2291
  */
1656
2292
  status: "pending" | "active" | "draining";
@@ -1669,9 +2305,9 @@ export interface components {
1669
2305
  };
1670
2306
  CreateRouteRequestBody: {
1671
2307
  description?: string;
1672
- /** @description 目的网段。不能为 0.0.0.0/0,也不能为某个子网自身的网段 */
2308
+ /** @description Destination CIDR. It cannot be `0.0.0.0/0`, nor the CIDR of a subnet of this network */
1673
2309
  destination: string;
1674
- /** @description 云服务器的私网地址,必须落在该私有网络的某个子网内 */
2310
+ /** @description Private address of an instance; must fall inside a subnet of this private network */
1675
2311
  nexthop: string;
1676
2312
  };
1677
2313
  SubnetResource: {
@@ -1692,12 +2328,12 @@ export interface components {
1692
2328
  items: components["schemas"]["SubnetResource"][] | null;
1693
2329
  };
1694
2330
  CreateSubnetRequestBody: {
1695
- /** @description 必须落在私有网络的网段内,且不能与已有子网重叠 */
2331
+ /** @description Must fall inside the CIDR of the private network and must not overlap an existing subnet */
1696
2332
  cidr: string;
1697
2333
  name: string;
1698
2334
  };
1699
2335
  NextFreeCidrResponseBody: {
1700
- /** @description 为空表示该私有网络内已无满足该掩码的空闲网段 */
2336
+ /** @description Empty when the private network has no free CIDR left for that prefix length */
1701
2337
  cidr: string;
1702
2338
  };
1703
2339
  SecurityGroupResource: {
@@ -1706,7 +2342,7 @@ export interface components {
1706
2342
  description: string;
1707
2343
  /** Format: uuid */
1708
2344
  id: string;
1709
- /** @description 默认安全组随私有网络一并释放,不可单独删除 */
2345
+ /** @description The default security group is released with its private network and cannot be deleted individually */
1710
2346
  is_default: boolean;
1711
2347
  name: string;
1712
2348
  /** Format: uuid */
@@ -1733,12 +2369,12 @@ export interface components {
1733
2369
  id: string;
1734
2370
  /**
1735
2371
  * Format: int64
1736
- * @description ICMP 协议下表示 code,而非端口
2372
+ * @description Denotes the ICMP code rather than a port when the protocol is ICMP
1737
2373
  */
1738
2374
  port_range_max: number | null;
1739
2375
  /**
1740
2376
  * Format: int64
1741
- * @description ICMP 协议下表示 type,而非端口
2377
+ * @description Denotes the ICMP type rather than a port when the protocol is ICMP
1742
2378
  */
1743
2379
  port_range_min: number | null;
1744
2380
  protocol: string | null;
@@ -1755,21 +2391,21 @@ export interface components {
1755
2391
  ethertype: "IPv4" | "IPv6";
1756
2392
  /**
1757
2393
  * Format: int64
1758
- * @description ICMP 协议下表示 code(0–255),而非端口
2394
+ * @description Denotes the ICMP code (0–255) rather than a port when the protocol is ICMP
1759
2395
  */
1760
2396
  port_range_max?: number | null;
1761
2397
  /**
1762
2398
  * Format: int64
1763
- * @description ICMP 协议下表示 type(0–255),而非端口
2399
+ * @description Denotes the ICMP type (0–255) rather than a port when the protocol is ICMP
1764
2400
  */
1765
2401
  port_range_min?: number | null;
1766
- /** @description 如 tcp、udp、icmp、ipv6-icmp。留空表示全部协议 */
2402
+ /** @description For example `tcp`, `udp`, `icmp` or `ipv6-icmp`. All protocols when omitted */
1767
2403
  protocol?: string;
1768
- /** @description 留空等同于 0.0.0.0/0 或 ::/0 */
2404
+ /** @description Equivalent to `0.0.0.0/0` or `::/0` when omitted */
1769
2405
  remote_ip_prefix?: string;
1770
2406
  };
1771
2407
  SnapshotResource: {
1772
- /** @description 由该快照恢复的云硬盘必须位于此可用区 */
2408
+ /** @description A disk restored from this snapshot must reside in this availability zone */
1773
2409
  availability_zone: string;
1774
2410
  /** Format: date-time */
1775
2411
  created_at: string;
@@ -1781,7 +2417,7 @@ export interface components {
1781
2417
  region_code: string;
1782
2418
  /**
1783
2419
  * Format: int64
1784
- * @description 创建快照时源云硬盘的容量。由该快照恢复的云硬盘不能小于此容量
2420
+ * @description Capacity of the source disk when the snapshot was created. A disk restored from it cannot be smaller
1785
2421
  */
1786
2422
  size_gb: number;
1787
2423
  /** @enum {string} */
@@ -1795,6 +2431,9 @@ export interface components {
1795
2431
  disk_id: string;
1796
2432
  name: string;
1797
2433
  };
2434
+ RenameSecurityGroupRequestBody: {
2435
+ name: string;
2436
+ };
1798
2437
  RenameSnapshotRequestBody: {
1799
2438
  name: string;
1800
2439
  };
@@ -1810,7 +2449,7 @@ export interface operations {
1810
2449
  "list-backups": {
1811
2450
  parameters: {
1812
2451
  query?: {
1813
- /** @description 只返回该云硬盘的备份 */
2452
+ /** @description Return only the backups of this disk */
1814
2453
  disk_id?: string;
1815
2454
  };
1816
2455
  header?: never;
@@ -2033,6 +2672,37 @@ export interface operations {
2033
2672
  };
2034
2673
  };
2035
2674
  };
2675
+ "get-disk-type": {
2676
+ parameters: {
2677
+ query?: never;
2678
+ header?: never;
2679
+ path: {
2680
+ diskTypeId: string;
2681
+ };
2682
+ cookie?: never;
2683
+ };
2684
+ requestBody?: never;
2685
+ responses: {
2686
+ /** @description OK */
2687
+ 200: {
2688
+ headers: {
2689
+ [name: string]: unknown;
2690
+ };
2691
+ content: {
2692
+ "application/json": components["schemas"]["DiskTypeResource"];
2693
+ };
2694
+ };
2695
+ /** @description Error */
2696
+ default: {
2697
+ headers: {
2698
+ [name: string]: unknown;
2699
+ };
2700
+ content: {
2701
+ "application/json": components["schemas"]["Error"];
2702
+ };
2703
+ };
2704
+ };
2705
+ };
2036
2706
  "list-images": {
2037
2707
  parameters: {
2038
2708
  query: {
@@ -2159,7 +2829,7 @@ export interface operations {
2159
2829
  parameters: {
2160
2830
  query?: {
2161
2831
  region_code?: string;
2162
- /** @description 与 region_code 同时提供,用于筛选可挂载的云硬盘 */
2832
+ /** @description Supplied together with `region_code` to filter attachable disks */
2163
2833
  availability_zone?: string;
2164
2834
  };
2165
2835
  header?: never;
@@ -2210,6 +2880,33 @@ export interface operations {
2210
2880
  "application/json": components["schemas"]["DiskResource"];
2211
2881
  };
2212
2882
  };
2883
+ /**
2884
+ * @description Payment required: **nothing was created.**
2885
+ *
2886
+ * Returned when `payment_method` is `online`. `meta.checkout_url` is where to send the
2887
+ * customer; `meta.order_id` is the order waiting on it.
2888
+ *
2889
+ * ## Why this is a status and not a field on a 200
2890
+ *
2891
+ * A field on a success response is something a client can forget to read, and forgetting it
2892
+ * means treating "we created nothing and are waiting for money" as "created" — which looks
2893
+ * identical from the outside until the bill does not add up. A 402 fails loudly in any
2894
+ * client that handles errors at all.
2895
+ *
2896
+ * ## What happens after they pay
2897
+ *
2898
+ * The money lands in the balance and the order is settled from it. The resource is **not**
2899
+ * created automatically: placing it again is the customer's move, because between paying
2900
+ * and coming back they may have changed their mind. The balance is theirs either way.
2901
+ */
2902
+ 402: {
2903
+ headers: {
2904
+ [name: string]: unknown;
2905
+ };
2906
+ content: {
2907
+ "application/json": components["schemas"]["Error"];
2908
+ };
2909
+ };
2213
2910
  /** @description Error */
2214
2911
  default: {
2215
2912
  headers: {
@@ -2611,7 +3308,10 @@ export interface operations {
2611
3308
  };
2612
3309
  "list-instances": {
2613
3310
  parameters: {
2614
- query?: never;
3311
+ query?: {
3312
+ /** @description Only instances carrying this label, written as `key:value` — for example `env:prod`. Both halves are matched exactly */
3313
+ label?: string;
3314
+ };
2615
3315
  header?: never;
2616
3316
  path?: never;
2617
3317
  cookie?: never;
@@ -2660,6 +3360,33 @@ export interface operations {
2660
3360
  "application/json": components["schemas"]["LaunchInstanceResponseBody"];
2661
3361
  };
2662
3362
  };
3363
+ /**
3364
+ * @description Payment required: **nothing was created.**
3365
+ *
3366
+ * Returned when `payment_method` is `online`. `meta.checkout_url` is where to send the
3367
+ * customer; `meta.order_id` is the order waiting on it.
3368
+ *
3369
+ * ## Why this is a status and not a field on a 200
3370
+ *
3371
+ * A field on a success response is something a client can forget to read, and forgetting it
3372
+ * means treating "we created nothing and are waiting for money" as "created" — which looks
3373
+ * identical from the outside until the bill does not add up. A 402 fails loudly in any
3374
+ * client that handles errors at all.
3375
+ *
3376
+ * ## What happens after they pay
3377
+ *
3378
+ * The money lands in the balance and the order is settled from it. The resource is **not**
3379
+ * created automatically: placing it again is the customer's move, because between paying
3380
+ * and coming back they may have changed their mind. The balance is theirs either way.
3381
+ */
3382
+ 402: {
3383
+ headers: {
3384
+ [name: string]: unknown;
3385
+ };
3386
+ content: {
3387
+ "application/json": components["schemas"]["Error"];
3388
+ };
3389
+ };
2663
3390
  /** @description Error */
2664
3391
  default: {
2665
3392
  headers: {
@@ -2766,7 +3493,7 @@ export interface operations {
2766
3493
  };
2767
3494
  };
2768
3495
  };
2769
- "act-on-instance": {
3496
+ "run-instance-command": {
2770
3497
  parameters: {
2771
3498
  query?: never;
2772
3499
  header?: never;
@@ -2777,7 +3504,7 @@ export interface operations {
2777
3504
  };
2778
3505
  requestBody: {
2779
3506
  content: {
2780
- "application/json": components["schemas"]["ActOnInstanceRequestBody"];
3507
+ "application/json": components["schemas"]["RunCommandRequestBody"];
2781
3508
  };
2782
3509
  };
2783
3510
  responses: {
@@ -2787,7 +3514,7 @@ export interface operations {
2787
3514
  [name: string]: unknown;
2788
3515
  };
2789
3516
  content: {
2790
- "application/json": components["schemas"]["InstanceResource"];
3517
+ "application/json": components["schemas"]["CommandResultResponseBody"];
2791
3518
  };
2792
3519
  };
2793
3520
  /** @description Error */
@@ -2835,7 +3562,7 @@ export interface operations {
2835
3562
  "get-instance-console-output": {
2836
3563
  parameters: {
2837
3564
  query?: {
2838
- /** @description 返回末尾多少行,0 表示全部 */
3565
+ /** @description Number of trailing lines to return; 0 returns the entire output */
2839
3566
  lines?: number;
2840
3567
  };
2841
3568
  header?: never;
@@ -2866,6 +3593,76 @@ export interface operations {
2866
3593
  };
2867
3594
  };
2868
3595
  };
3596
+ "set-instance-labels": {
3597
+ parameters: {
3598
+ query?: never;
3599
+ header?: never;
3600
+ path: {
3601
+ instanceId: string;
3602
+ };
3603
+ cookie?: never;
3604
+ };
3605
+ requestBody: {
3606
+ content: {
3607
+ "application/json": components["schemas"]["SetInstanceLabelsRequestBody"];
3608
+ };
3609
+ };
3610
+ responses: {
3611
+ /** @description OK */
3612
+ 200: {
3613
+ headers: {
3614
+ [name: string]: unknown;
3615
+ };
3616
+ content: {
3617
+ "application/json": components["schemas"]["InstanceResource"];
3618
+ };
3619
+ };
3620
+ /** @description Error */
3621
+ default: {
3622
+ headers: {
3623
+ [name: string]: unknown;
3624
+ };
3625
+ content: {
3626
+ "application/json": components["schemas"]["Error"];
3627
+ };
3628
+ };
3629
+ };
3630
+ };
3631
+ "set-instance-notes": {
3632
+ parameters: {
3633
+ query?: never;
3634
+ header?: never;
3635
+ path: {
3636
+ instanceId: string;
3637
+ };
3638
+ cookie?: never;
3639
+ };
3640
+ requestBody: {
3641
+ content: {
3642
+ "application/json": components["schemas"]["SetInstanceNotesRequestBody"];
3643
+ };
3644
+ };
3645
+ responses: {
3646
+ /** @description OK */
3647
+ 200: {
3648
+ headers: {
3649
+ [name: string]: unknown;
3650
+ };
3651
+ content: {
3652
+ "application/json": components["schemas"]["InstanceResource"];
3653
+ };
3654
+ };
3655
+ /** @description Error */
3656
+ default: {
3657
+ headers: {
3658
+ [name: string]: unknown;
3659
+ };
3660
+ content: {
3661
+ "application/json": components["schemas"]["Error"];
3662
+ };
3663
+ };
3664
+ };
3665
+ };
2869
3666
  "reset-instance-password": {
2870
3667
  parameters: {
2871
3668
  query?: never;
@@ -2901,6 +3698,41 @@ export interface operations {
2901
3698
  };
2902
3699
  };
2903
3700
  };
3701
+ "reboot-instance": {
3702
+ parameters: {
3703
+ query?: never;
3704
+ header?: never;
3705
+ path: {
3706
+ instanceId: string;
3707
+ };
3708
+ cookie?: never;
3709
+ };
3710
+ requestBody: {
3711
+ content: {
3712
+ "application/json": components["schemas"]["RebootInstanceRequestBody"];
3713
+ };
3714
+ };
3715
+ responses: {
3716
+ /** @description OK */
3717
+ 200: {
3718
+ headers: {
3719
+ [name: string]: unknown;
3720
+ };
3721
+ content: {
3722
+ "application/json": components["schemas"]["InstanceResource"];
3723
+ };
3724
+ };
3725
+ /** @description Error */
3726
+ default: {
3727
+ headers: {
3728
+ [name: string]: unknown;
3729
+ };
3730
+ content: {
3731
+ "application/json": components["schemas"]["Error"];
3732
+ };
3733
+ };
3734
+ };
3735
+ };
2904
3736
  "rebuild-instance": {
2905
3737
  parameters: {
2906
3738
  query?: never;
@@ -3033,6 +3865,68 @@ export interface operations {
3033
3865
  };
3034
3866
  };
3035
3867
  };
3868
+ "start-instance": {
3869
+ parameters: {
3870
+ query?: never;
3871
+ header?: never;
3872
+ path: {
3873
+ instanceId: string;
3874
+ };
3875
+ cookie?: never;
3876
+ };
3877
+ requestBody?: never;
3878
+ responses: {
3879
+ /** @description OK */
3880
+ 200: {
3881
+ headers: {
3882
+ [name: string]: unknown;
3883
+ };
3884
+ content: {
3885
+ "application/json": components["schemas"]["InstanceResource"];
3886
+ };
3887
+ };
3888
+ /** @description Error */
3889
+ default: {
3890
+ headers: {
3891
+ [name: string]: unknown;
3892
+ };
3893
+ content: {
3894
+ "application/json": components["schemas"]["Error"];
3895
+ };
3896
+ };
3897
+ };
3898
+ };
3899
+ "stop-instance": {
3900
+ parameters: {
3901
+ query?: never;
3902
+ header?: never;
3903
+ path: {
3904
+ instanceId: string;
3905
+ };
3906
+ cookie?: never;
3907
+ };
3908
+ requestBody?: never;
3909
+ responses: {
3910
+ /** @description OK */
3911
+ 200: {
3912
+ headers: {
3913
+ [name: string]: unknown;
3914
+ };
3915
+ content: {
3916
+ "application/json": components["schemas"]["InstanceResource"];
3917
+ };
3918
+ };
3919
+ /** @description Error */
3920
+ default: {
3921
+ headers: {
3922
+ [name: string]: unknown;
3923
+ };
3924
+ content: {
3925
+ "application/json": components["schemas"]["Error"];
3926
+ };
3927
+ };
3928
+ };
3929
+ };
3036
3930
  "list-instance-disks": {
3037
3931
  parameters: {
3038
3932
  query?: never;
@@ -3299,7 +4193,7 @@ export interface operations {
3299
4193
  "list-operation-logs": {
3300
4194
  parameters: {
3301
4195
  query?: {
3302
- /** @description 只看某一种操作,取值与接口的 operation id 一致 */
4196
+ /** @description Return a single kind of operation; the value matches the operation id of the endpoint */
3303
4197
  action?: string;
3304
4198
  limit?: number;
3305
4199
  offset?: number;
@@ -3424,7 +4318,7 @@ export interface operations {
3424
4318
  "list-private-images": {
3425
4319
  parameters: {
3426
4320
  query?: {
3427
- /** @description 只返回该地区的镜像。镜像只能用于所在地区 */
4321
+ /** @description Return only the images of this region. An image can only be used in the region that holds it */
3428
4322
  region_code?: string;
3429
4323
  };
3430
4324
  header?: never;
@@ -3584,7 +4478,7 @@ export interface operations {
3584
4478
  "list-private-networks": {
3585
4479
  parameters: {
3586
4480
  query?: {
3587
- /** @description 不传时返回全部地区 */
4481
+ /** @description Returns every region when omitted */
3588
4482
  region_code?: string;
3589
4483
  };
3590
4484
  header?: never;
@@ -4061,7 +4955,7 @@ export interface operations {
4061
4955
  parameters: {
4062
4956
  query?: {
4063
4957
  region_code?: string;
4064
- /** @description 只返回该私有网络下的安全组 */
4958
+ /** @description Return only the security groups of this private network */
4065
4959
  private_network_id?: string;
4066
4960
  };
4067
4961
  header?: never;
@@ -4183,6 +5077,41 @@ export interface operations {
4183
5077
  };
4184
5078
  };
4185
5079
  };
5080
+ "rename-security-group": {
5081
+ parameters: {
5082
+ query?: never;
5083
+ header?: never;
5084
+ path: {
5085
+ securityGroupId: string;
5086
+ };
5087
+ cookie?: never;
5088
+ };
5089
+ requestBody: {
5090
+ content: {
5091
+ "application/json": components["schemas"]["RenameSecurityGroupRequestBody"];
5092
+ };
5093
+ };
5094
+ responses: {
5095
+ /** @description OK */
5096
+ 200: {
5097
+ headers: {
5098
+ [name: string]: unknown;
5099
+ };
5100
+ content: {
5101
+ "application/json": components["schemas"]["SecurityGroupResource"];
5102
+ };
5103
+ };
5104
+ /** @description Error */
5105
+ default: {
5106
+ headers: {
5107
+ [name: string]: unknown;
5108
+ };
5109
+ content: {
5110
+ "application/json": components["schemas"]["Error"];
5111
+ };
5112
+ };
5113
+ };
5114
+ };
4186
5115
  "list-security-group-rules": {
4187
5116
  parameters: {
4188
5117
  query?: never;
@@ -4282,7 +5211,7 @@ export interface operations {
4282
5211
  "list-snapshots": {
4283
5212
  parameters: {
4284
5213
  query?: {
4285
- /** @description 只返回该云硬盘的快照 */
5214
+ /** @description Return only the snapshots of this disk */
4286
5215
  disk_id?: string;
4287
5216
  };
4288
5217
  header?: never;