我可以 运行 对给定图表的所有版本执行 Helm 命令吗?

Can I run a Helm command on all releases of a given chart?

我经常跨多个命名空间安装一个伞形 Helm 图表的多个实例以进行测试。我想继续使用随机生成的名称,但也能够在不需要为每个新版本名称更改的一个命令中拆除同一图表的多个版本。

所以对于这样的图表:

$ helm ls
NAME                REVISION    UPDATED                     STATUS      CHART                 NAMESPACE
braided-chimp       1           Mon Jul 23 15:52:43 2018    DEPLOYED    foo-platform-0.2.1    foo-2
juiced-meerkat      1           Mon Jul  9 15:19:43 2018    DEPLOYED    postgresql-0.9.4      default
sweet-sabertooth    1           Mon Jul 23 15:52:34 2018    DEPLOYED    foo-platform-0.2.1    foo-1

我可以删除 foo-platform-0.2.1 图表的所有版本,方法是输入版本名称,例如:

$ helm delete braided-chimp sweet-sabertooth

但每次我 运行 命令时,我都必须用新的版本名称更新它。

是否可以 运行 根据图表名称在所有命名空间中列出/删除给定图表的所有实例? (我在想 kubectl 支持 -l 标志的东西。)

例如,我怎样才能实现与此等效的东西?

$ helm delete -l 'chart=foo-platform-0.2.1'

有更好的方法吗?

你可以试试:

helm delete $(helm ls | awk ' ~ /SEARCH/ { print }')

SEARCH 替换为您要使用的任何图表名称模式

由于 awk 将在空格上定界,时间戳有几个空格,所以它有点被忽略了。

那么传统上用制表符分隔的内容是:

1=NAME 2=REVISION 3=UPDATED 4=STATUS 5=CHART 6=NAMESPACE

变为:

1=mottled-whippet2=13=Fri4=Jul5=206=13:15:457=20188=DEPLOYED9=postgresql-0.15.0 10=namespace

我想看看是否可以使用 jq 而不是 awk 获得相同的结果。

我不是 jq 专家,所以可能有更简单的方法。 用干的测试运行!

假设Bash:

CHARTID=foo-platform-0.2.1
helm delete --dry-run $(helm ls --output json | jq -r ".Releases[] | select(.Chart == \"${CHARTID}\") | .Name")

对于上面的示例,我希望输出为:

release "braided-chimp" deleted
release "sweet-sabertooth" deleted