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"}

上述输出中有几个关键点需要注意

  1. 每个类型为 io.k8s.sigs.minikube.step 的日志都表示 minikube start 过程中的一个独立步骤
  2. 每个步骤都有一个 currentstep 字段,允许客户端跟踪 minikube start 的进度
  3. 每个 currentstep 都是独立的,并且按顺序递增

为了实现此输出,minikube 维护着一个日志注册表。通过这种方式,minikube 知道在过程开始时有多少预期的 totalsteps,以及当前的步骤是什么。

如果您更改日志或添加新日志,则需要更新 minikube 注册表以通过集成测试。

将日志添加到注册表

将日志添加到注册表(位于 register.go)有三个步骤。

您需要将新日志添加到两个位置

  1. 作为 RegStep 类型的常量,此处
  2. init() 函数中注册表本身中,此处

**注意:重要的是,步骤的顺序必须与它们将被调用的预期顺序匹配。因此,如果您添加的步骤应该在“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})

上次修改时间:2022年1月29日:修复拼写错误 (bc0382182)