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

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

  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)