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

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

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

为了实现此输出,minikube 维护一个日志注册表。这样,minikube 在流程开始时就知道预期的 totalsteps 数量,以及当前步骤是什么。

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

向注册表添加日志

将日志添加到存在于 register.go 中的注册表的步骤有三个。

您需要在两个地方添加新日志

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

**注意:步骤的顺序必须与预期调用顺序一致。因此,如果您添加了一个应该在“准备 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})

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