JSONPath 排除数组中包含匹配字符串的值的项目

JSONPath to exclude item in array with value containing matching string

我正在使用 kubectl 并尝试 运行 kubectl get nodes 并从结果中排除任何主节点。 我的最终目标是获取工作节点的 IP 地址列表。

此命令为我提供了所有节点的 IP 地址(包括主节点):

kubectl get nodes -o jsonpath="{range .items[*]}{.status.addresses[?(@.type=='InternalIP')].address}{'\n'}{end}"

但正如我所说,我需要排除任何主节点。名称的路径是:.metadata.name。我需要从 range 中排除任何包含文本 -master-.metadata.name。 (更新:或者,我只能包括包含文本 -worker- 的那些。)

我发现相等,但不相等。但我似乎无法找到一种方法来实现“包含”或“正则表达式”的能力。

如何排除与模式匹配的项目?

对于此类用例,您可以使用标签选择器。

因为所有主节点都有 node-role.kubernetes.io/master: "" 标签。您可以使用它来排除这些节点。使用:

kubectl get no -l node-role.kubernetes.io/master!=""

如果您的工作节点有一些特定的标签,您可以将其用作选择性选择器。


您正在尝试做的事情:匹配模式;内置 jsonpath 是不可能的,因为它的功能有限,但如果你真的不喜欢标签和选择器,你可以为这个用例使用 jq