如何指定注释,例如+kubebuilder:printcolumn
在命令的输出中添加列kubectl get my-crd.my-group.my-domain.com
?
我有一个 CRD(自定义资源定义),struct
其规格和状态通常为 s(类似于此处的 Kubebuilder 教程https://book.kubebuilder.io/cronjob-tutorial/new-api.html#添加新的 api)。
我有这样的状态 struct
:
type ScheduleSetStatus struct {
// When was the last time the Schedule Set
// was successfully deployed.
LastDeployTime string `json:"lastDeployTime"` // metav1.Time
// The CronJobs that have been successfully deployed
DeployedCronJobs []string `json:"deployedCronJobs"`
// The CronJobs that had errors when the deployment
// has been attempted.
ErroredCronJobs map[string]string `json:"erroredCronJobs"` // TODO `error` JSON serialisable
}
其中有几个问题:
时间场
- 我已经尝试将其设为类型
metav1.Time
(方便的格式,如他们在https://book.kubebuilder.io/cronjob-tutorial/api-design.html?highlight=metav1.Time#designing-an-api中所述),但是然后此注释// +kubebuilder:printcolumn:name="Last Deploy",type="date",JSONPath=
.status.lastDeployTime`` 在 .status.lastDeployTime 的输出中显示为空kubectl
。 - 所以我将类型更改为
string
(然后在控制器中执行oess.Status.LastDeployTime = fmt.Sprintf("%s", metav1.Time{Time: time.Now().UTC()})
),然后添加注释+kubebuilder:printcolumn:name="Last Deploy",type=string,JSONPath=
.status.lastDeployTime`` 但该字段在 .status.lastDeployTime 的输出中仍然显示为空kubectl
。
切片字段[]string
和地图字段map[string]string
- 我该如何配置这些?这里没有提及(点击“显示详细参数帮助”时):https ://book.kubebuilder.io/reference/markers/crd.html
- 如果这些不是在使用时出现格式问题的“简单类型”
kubectl
,这是否意味着我唯一的选择是string
用某种方式制作它们fmt.Sprintf(...)
? - 还有其他选择吗?