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
。
我正在使用 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
。