从 kubectl 图像输出到数组(bash 脚本)

Output from kubectl images into an array (bash script)

我正在按照 的格式尝试将图像(对于所有 pods)的 jsonpath 获取到一个数组中,然后我可以循环遍历并 运行数组中每个项目的 gcloud 命令。

我正在尝试的命令是:

array=( $(kubectl get pods -o jsonpath="{.items[*].spec.containers[*].image}" | jq -r 'keys[]') )
declare -p array

但是我收到错误:parse error: Invalid numeric literal at line 1, column 41

当我 运行 命令没有 jq 命令时,它会将所有内容都放入第一个索引项中,所以一个很大的长字符串,带有空格,例如

typeset -a array=( 'eu.gcr.io/repo/imagename1 eu.gcr.io/repo/imagename2 eu.gcr.io/repo/imagename3 eu.gcr.io/repo/imagename4' )

关于如何将此输出放入单独的数组项以及可用于迭代的内容的任何想法?

您的 -o jsonpath="{.items[*].spec.containers[*].image}" 在一行中输出所有图像名称(这是我的):

nginx docker.local/node-server:1640867594 docker.local/node-server:1640867594 docker.local/node-server:1640867594 nginx nginx nginx nginx nginx

它不再是 JSON,因此将其通过管道输送到 jq 会发生奇怪的事情。在您的情况下,jq(可能)抱怨 : 项之一。在我的例子中,我得到了一个稍微不同的解析错误。

要么放弃使用 jq,要么充分利用它:

kubectl get pods -o json | jq -r '.items[].spec.containers[].image' | sort | uniq | ...