英文:
Customizing kubectl output with go templates using custom function
问题
我正在尝试为解析PodStatus中的时间并获取其绝对时间添加一个自定义函数到Go模板中。
以下是自定义函数的示例代码:
PodScheduled, _ := time.Parse(time.RFC3339, "2021-12-23T20:20:36Z")
Ready, _ := time.Parse(time.RFC3339, "2021-12-31T07:36:11Z")
difference := Ready.Sub(PodScheduled)
fmt.Printf("difference = %v\n", difference)
你可以使用内置函数。
你想知道如何在kubectl中使用自定义函数吗?
例如,你可以使用这个库:https://github.com/Masterminds/sprig
谢谢
英文:
I'm trying to add a custom function In Go template for parsing the time in PodStatus and getting the absolute time for it.
Example for the custom function:
PodScheduled, _ := time.Parse(time.RFC3339, "2021-12- 23T20:20:36Z")
Ready, _ := time.Parse(time.RFC3339, "2021-12-31T07:36:11Z")
difference := Ready.Sub(PodScheduled)
fmt.Printf("difference = %v\n", difference)
I can use the built-in functions.
How I can use a custom function with the kubectl?
For example this lib:
https://github.com/Masterminds/sprig
Thanks
答案1
得分: 2
我理解你有(至少)3个选项:
- 不推荐:编写自己的客户端(而不是
kubectl
),提供所需的功能; - 鼓励:使用shell来对来自
kubectl get pods --output=json
的输出进行后处理,通过管道将结果传递给:- 要么使用你的Golang二进制文件从标准输入读取
- 或者更好的选择是使用通用的JSON处理工具,比如
jq
,它可以完成这个任务(还有更多!)
- 为了完整起见,
kubectl
支持输出格式化(--output=jsonpath...
);尽管JSONPath
可能不足以满足这个需求;
请参阅jq的文档了解日期的处理方法。
英文:
IIUC you have (at least) 3 options:
- Discouraged: Write your own client (instead of
kubectl
) that provides the functionality; - Encouraged: Use the shell to post-process the output from e.g.
kubectl get pods --output=json
) by piping the result through:- Either your Golang binary that reads from standard input
- Or better a general-purpose JSON processing tool like
jq
that would do this (and much more!)
- For completeness,
kubectl
supports output formatting (--output=jsonpath...
); althoughJSONPath
may be insufficient for this need;
See jq's documentation for Dates
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论