跳至主要内容

条件子句上下文

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

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

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

条件子句可以包含上下文键(例如 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"

添加自定义条件子句上下文

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

如果指定了范围,则会触发自定义行为,以避免在该特定范围内的不同扩展之间发生任何类型的冲突。Podman Desktop 负责处理其状态并在必要时相应地清除状态。

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

下面的第一个示例将键 "podmanIsInstalled" 全局设置为 true,而第二个示例使用入门范围将键 "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 提供了一组可以相互组合的运算符。

逻辑运算符

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

运算符符号示例
!!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 运算符允许检查值是否存在/不存在于另一个值中。右侧应该是上下文键,其值是在上下文中检索的。左侧可以是值或上下文键。

运算符符号示例
inlabel in containerLabelKeys
不在label not in containerLabelKeys

匹配运算符

匹配运算符允许将右侧项目视为正则表达式文字,以匹配左侧。

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