用一行命令过滤 kustomize build 命令的输出结果
定制化构建的输出往往是巨大的多文档YAML,每次都用less显示很麻烦。
我尝试写了一个使用jq和yq的单行过滤器,以kind和metadata.name作为筛选条件来处理多个YAML格式的文档。为什么要同时使用两者呢?因为似乎yq不支持select功能。参考资料:https://github.com/mikefarah/yq/issues/173。
$ kustomize build . | yq r - -d "*" -j | jq '.[] | select(.kind | match("service";"i")) | select(.metadata.name=="prometheus")' | jq . -s | yq r -
- apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
- apiVersion: v1
kind: Service
metadata:
name: prometheus
spec:
ports:
- port: 9090
targetPort: 9090
selector:
app.kubernetes.io/name: prometheus
type: ClusterIP
这个确实很长,所以我把它转换成了一个Shell脚本函数。
function kfilter() {
cat - | yq r - -d "*" -j | \
jq ".[] | select(.kind | match(\"$1\";\"i\")) | select(.metadata.name==\"$2\")" \
| jq . -s | yq r -
}
结束了。
$ kustomize build . | kfilter service alertmanager
- apiVersion: v1
kind: Service
metadata:
name: alertmanager
spec:
ports:
- port: 9093
targetPort: 9093
selector:
app.kubernetes.io/name: alertmanager
type: ClusterIP