Pri*_*sco 2 python extract docker docker-image kubernetes-helm
有没有办法通过python从舵图中提取docker图像?
我想避免任何:
helm install --dry-run helm-chart > log
bash 脚本来提取此信息。
如果舵图包含两个图像(例如),我想提取这些图像
例子:
image: repo/image1:1.0 image1.yaml file
image: repo/image2:1.0 image2.yaml file
Run Code Online (Sandbox Code Playgroud)
迈克在这里的一篇博客文章中提供了一个很好的答案,所有功劳都归功于他。
要列出给定 Helm 图表中的所有唯一图像:
helm template . \
| yq '..|.image? | select(.)' \
| sort -u
Run Code Online (Sandbox Code Playgroud)
helm template .
这假设您位于包含 Helm 图表的目录中。template 命令打印出通常通过 helm install 创建的所有 Kubernetes 对象。其输出格式为 yaml。
yq '..|.image? | select(.)'
yq 是流行的 jq 命令行工具的变体。jq 希望处理 JSON 流,而 yq 允许您对 yaml 执行相同的操作。
神奇之处在于 yq 提供的过滤器。过滤器作用于一些输入并执行一些操作以产生输出。在这种情况下,我们使用递归下降运算符来查找所有名为 image 的字段。这 ?在.image?表示 yq 应该生成图像值或 null 如果它不存在。将其传递给 select(.) 将忽略所有空值,最终返回一个换行分隔的图像字符串。
helm template会将 Helm 图表的内容渲染为 YAML 文件并将其打印到标准输出。一个快速而肮脏的答案是
helm template helm-chart | grep 'image:'
Run Code Online (Sandbox Code Playgroud)
但您也可以使用yq等工具基于 YAML 结构进行查询。
您确实必须使用某种 Helm 命令来渲染模板,因为它很常见,可以指定诸如
image: 'some/image:{{ .Values.tag }}'
Run Code Online (Sandbox Code Playgroud)
这取决于输入文件。另一方面,您可以使用常用的 Helm--set或-f选项来指定值,因此,如果您在不同的环境(或不同的构建,或者仅包含一些基于设置的部署)中使用不同的映像,您将获得准确的结果反映将要部署的内容。