Minikube JSON 输出
如何添加日志以方便 JSON 输出
本文档是为 minikube 贡献者编写的,他们需要为 minikube 日志注册表添加日志以获得成功的 JSON 输出。如果 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.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 中的注册表的步骤有三个。
您需要在两个地方添加新日志
**注意:步骤的顺序必须与预期调用顺序一致。因此,如果您添加了一个应该在“准备 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})