Minikube JSON 输出
如何添加日志以方便 JSON 输出
本文档是为 minikube 贡献者编写的,这些贡献者需要将日志添加到 minikube 日志注册表中以成功输出 JSON。如果您的 PR 上的 TestJSONOutput
集成测试失败,您可能需要将日志添加到注册表中。
背景
minikube 通过 --output
标志提供 minikube start
的 JSON 输出
minikube start --output json
这会将常规输出
$ minikube start
😄 minikube v1.12.1 on Darwin 10.14.6
✨ Automatically selected the hyperkit driver
👍 Starting control plane node minikube in cluster minikube
🔥 Creating hyperkit VM (CPUs=2, Memory=6000MB, Disk=20000MB) ...
转换为 Cloud Events 兼容的 JSON 输出
$ minikube start --output json
{"data":{"currentstep":"0","message":"minikube v1.12.1 on Darwin 10.14.6\n","name":"Initial Minikube Setup","totalsteps":"10"},"datacontenttype":"application/json","id":"68ff70ae-202b-4b13-8351-e9f060e8c56e","source":"https://minikube.cn/","specversion":"1.0","type":"io.k8s.sigs.minikube.step"}
{"data":{"currentstep":"1","message":"Automatically selected the hyperkit driver\n","name":"Selecting Driver","totalsteps":"10"},"datacontenttype":"application/json","id":"39bed8e9-3c1a-444e-997c-2ec19bdb1ca1","source":"https://minikube.cn/","specversion":"1.0","type":"io.k8s.sigs.minikube.step"}
{"data":{"currentstep":"3","message":"Starting control plane node minikube in cluster minikube\n","name":"Starting Node","totalsteps":"10"},"datacontenttype":"application/json","id":"7c80bc53-3ac4-4a42-a493-92e269cc56c9","source":"https://minikube.cn/","specversion":"1.0","type":"io.k8s.sigs.minikube.step"}
{"data":{"currentstep":"6","message":"Creating hyperkit VM (CPUs=2, Memory=6000MB, Disk=20000MB) ...\n","name":"Creating VM","totalsteps":"10"},"datacontenttype":"application/json","id":"7f5f23a4-9a09-4954-8abc-d29bda2cc569","source":"https://minikube.cn/","specversion":"1.0","type":"io.k8s.sigs.minikube.step"}
上述输出中有几个关键点需要注意
- 每个类型为
io.k8s.sigs.minikube.step
的日志都表示minikube start
过程中的一个独立步骤 - 每个步骤都有一个
currentstep
字段,允许客户端跟踪minikube start
的进度 - 每个
currentstep
都是独立的,并且按顺序递增
为了实现此输出,minikube 维护着一个日志注册表。通过这种方式,minikube 知道在过程开始时有多少预期的 totalsteps
,以及当前的步骤是什么。
如果您更改日志或添加新日志,则需要更新 minikube 注册表以通过集成测试。
将日志添加到注册表
将日志添加到注册表(位于 register.go)有三个步骤。
您需要将新日志添加到两个位置
**注意:重要的是,步骤的顺序必须与它们将被调用的预期顺序匹配。因此,如果您添加的步骤应该在“Preparing Kubernetes”之后调用,则新步骤应该放在“Preparing Kubernetes”之后。
最后,在调用 out.T
之前,通过将此行代码放置来设置您的新步骤
register.Reg.SetStep(register.MyNewStep)
您可以在 config.go 中查看在代码中设置注册表步骤的示例
register.Reg.SetStep(register.PreparingKubernetes)
out.Step(cr.Style(), "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...", out.V{"k8sVersion": k8sVersion, "runtime": cr.Name(), "runtimeVersion": version})