Kibotos

到期时间

设置到期时间后,时间一到 ctrl 会自动停止或删除 Workspace。本页介绍如何在创建时、单独地或随启动与停止一起设置、修改和清除它。

创建时设置

创建一个在 ctrl 接受命令八小时后到期的 Workspace:

kibo workspace create --template "$template_id" --expires-in 8h
  • 倒计时从 ctrl 接受命令开始,包含创建耗时。
  • 不传 --expires-in 则不设置到期时间。
  • 访问文件或执行命令不会延长到期时间。
  • kibo transfer restore 接受同样的参数。

--expiration-action 选择到期时做什么:

动作结果
stop(默认)Workspace 停止,Volume 与可写层保留
deleteWorkspace 被删除

警告

新建的 Volume 默认随 Workspace 删除。选 --expiration-action delete 时,/data 里的数据会在 Workspace 到期时一起消失。

到期动作由 ctrl 执行,kibo 退出不会影响它。

查看到期设置

显示 Workspace 及其到期设置:

kibo workspace expiration get "$workspace_id"

kibo workspace get 与 list 输出的 expiration 包含:

字段含义
revision到期设置的版本,只增不减。没有设置到期时间时也有版本号
expires_at到期时刻
action到期动作:delete 或 stop
claimed_command_idctrl 已开始执行到期动作时,对应命令的 ID

单独修改

设置新的到期时间与动作,或者清除到期时间:

workspace_id=workspace-example
kibo workspace expiration set "$workspace_id" --expires-in 20m --expiration-action delete
kibo workspace expiration clear "$workspace_id"

能做哪种修改取决于 Workspace 的状态:

状态expiration setexpiration clear
AVAILABLE可以可以
STOPPED不可以可以
FAILED,且不再占用执行、没有开始删除不可以可以

FAILED 的 Workspace 也可能带着到期时间,例如启动在放置阶段失败,留下了启动时设置的到期时间。

重要

ctrl 已经开始执行到期动作后,不能再通过延期取消。

随 start 与 stop 一起设置

kibo workspace start 和 stop 也接受 --expires-in 与 --expiration-action,或者用 --clear-expiration 清除到期时间。两组参数互斥。

停止 Workspace 并让它不带到期时间,或者启动时为这次运行设置到期时间:

# 停止,并让停止后的 Workspace 不带到期时间。
kibo workspace stop "$workspace_id" --clear-expiration
# 启动,并为这次运行设置到期时间。启动耗时计入其中。
kibo workspace start "$workspace_id" --expires-in 30m --expiration-action stop
  • 到期设置与命令在同一次操作中提交,不存在「已经启动但还没有到期时间」的中间状态,也不需要成功后再执行一次 expiration set。
  • 命令成功后版本加一,响应中带有新的 expiration.revision 与 expires_at。命令失败不改动到期设置。
  • 到期参数是命令输入的一部分。同一个幂等键换一个 --expires-in 会被判定为冲突,不会静默延期。

不带到期参数时

命令对到期设置的影响
stop消费 stop 类型的到期设置,保留 delete 类型
start不改动到期设置,也不恢复已被消费的设置

期望版本

下面这些命令都带到期设置的期望版本,即 expiration.revision:

命令参数
kibo workspace expiration set、clear--expected-revision
kibo workspace start、stop、delete--expected-expiration-revision,传入时必须为正数
  • 不传这个参数时,kibo 先读取当前版本再提交;传入的值原样提交。
  • 版本不一致时返回 failed_precondition。对 expiration set 与 clear,状态不允许时也返回同样的错误码,用错误详情里的 observed_workspace 区分两者。
  • 收到 failed_precondition 后,先重新读取 Workspace 再决定,不要用旧的意图覆盖新状态。

脚本需要重放时,把 --command-id 与期望版本一起传入:

revision=$(kibo --json workspace get "$workspace_id" | jq -er '.result.expiration.revision')
kibo workspace expiration set "$workspace_id" --command-id renew-example \
  --expected-revision "$revision" --expires-in 20m

用 API

kibo 命令API期望版本字段
workspace expiration set、clearUpdateWorkspaceExpirationexpected_revision
workspace start、stop、deleteStartWorkspace、StopWorkspace、DeleteWorkspaceexpected_expiration_revision

两个字段都对应 expiration.revision。

下一步

本页内容