跳转到主内容

When 子句上下文

Podman Desktop 使用 when 子句来启用或禁用扩展命令和 UI 自定义,例如视图。

例如,Kind 扩展通过使用以下指令,为一个标签等于 io.x-k8s.kind.cluster 的容器添加一个自定义图标。

"views": {
"icons/containersList": [
{
"when": "io.x-k8s.kind.cluster in containerLabelKeys",
"icon": "${kind-icon}"
}
]
}

when 子句可以由一个上下文键(例如 isLinux)或复杂的表达式组成,以定义一个特定的状态。

可用的上下文键

Podman Desktop 有一组上下文键,它们的求值结果为布尔值 true/false。

上下文键为 true 的条件
操作系统上下文
isLinux当操作系统是 Linux 时为 true。
isWindows当操作系统是 Windows 时为 true。
isMac当操作系统是 macOS 时为 true。

Podman Desktop 还提供了一些返回值的上下文键,可用于创建有意义的表达式

上下文键包含的值
containerLabelKeys属于当前容器的所有标签的列表。示例:"value in containerLabelKeys"
selectedImageId仪表盘/镜像菜单打开时所属的镜像 ID。示例:"selectedImageId in imagesPushInProgressToKind"

添加自定义 when 子句上下文

如果您正在创建自己的扩展,并且现有的键都不符合您的需求,您可以通过调用 Podman Desktop API 中 context 命名空间提供的 setValue(key: string, value: any, scope?: 'onboarding') 函数来设置自己的上下文键。

如果指定了作用域 (scope),它会触发一个自定义行为,以避免不同扩展在该特定作用域下发生任何类型的冲突。Podman Desktop 负责处理其状态,并在必要时进行相应的清理。

如果省略,键/值将被全局设置。因此,建议使用扩展 ID作为键的一部分,以避免与其他扩展发生意外冲突。

下面的第一个示例将键 "podmanIsInstalled" 全局设置为 true,而第二个示例则使用 onboarding 作用域将键 "toolInstalled" 设置为 oc.exe

extensionsAPI.context.setValue('podmanIsInstalled', true);

extensionsAPI.context.setValue('toolInstalled', 'oc.exe', 'onboarding');

toolInstalled 设置为 oc.exe 后,您可以在 when 子句中使用此信息来启用某些功能

{
"when": "onboardingContext:toolInstalled == oc.exe"
}

条件运算符

为了创建更复杂的 when 子句,Podman Desktop 提供了一组可以相互组合的运算符。

逻辑运算符

逻辑运算符允许组合简单的上下文键或包含其他运算符的 when 子句表达式

运算符符号示例
!!podmanIsInstalled!(podmanIsInstalled && isWindows)
&&podmanIsInstalled && isWindows
||isLinux || isWindows

相等运算符

相等运算符允许检查上下文键的值是否与指定值相等。

注意:右侧是一个值,不被视为上下文键,因此不会在上下文中搜索值。如果它包含空格,必须用单引号括起来(例如 'my tool.exe'

运算符符号示例
等于==onboardingContext:toolInstalled == oc.exe
不等于!=onboardingContext:toolInstalled != oc.exe

比较运算符

比较运算符允许将上下文键的值与一个数字进行比较。

注意:运算符的左侧和右侧必须用空格分隔 - bar < 2,而不是 bar<2

运算符符号示例
大于>, >=onboardingContext:toolInstalled > 2
小于<, <=onboardingContext:toolInstalled <= 3

In 和 not in

in/not in 运算符允许检查一个值是否存在于另一个值中。右侧应该是一个上下文键,其值会在上下文中被检索。左侧可以是一个值或一个上下文键。

运算符符号示例
Ininlabel in containerLabelKeys
not inlabel not in containerLabelKeys

匹配运算符

匹配运算符允许将右侧项视为正则表达式字面量,与左侧进行匹配。

运算符符号示例
匹配=~label =~ /podman$/