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