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
运算符允许检查一个值是否存在于另一个值中。右侧应该是一个上下文键,其值会在上下文中被检索。左侧可以是一个值或一个上下文键。
运算符 | 符号 | 示例 |
---|---|---|
In | in | label in containerLabelKeys |
非 | not in | label not in containerLabelKeys |
匹配运算符
匹配运算符允许将右侧项视为正则表达式字面量,与左侧进行匹配。
运算符 | 符号 | 示例 |
---|---|---|
匹配 | =~ | label =~ /podman$/ |