Minikube JSON 输出
如何添加日志以方便 JSON 输出
本文档是为需要向 minikube 日志注册表添加日志以实现成功 JSON 输出的 minikube 贡献者编写的。如果 TestJSONOutput
集成测试在您的 PR 上失败,您可能需要向注册表添加日志。
背景
minikube 为 minikube start
提供 JSON 输出,可通过 --output
标志访问
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.kubernetes.ac.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.kubernetes.ac.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.kubernetes.ac.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.kubernetes.ac.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 中。
您需要在两个位置添加新日志
**注意:步骤的顺序必须与它们预期被调用的顺序一致。因此,如果您添加一个本应在“准备 Kubernetes”之后调用的步骤,则新步骤应放在“准备 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})