Cómo imprimir los campos de estado definidos en Kubebuilder para que aparezcan al usar Kubectl.
¿Cómo debo especificar los comentarios como +kubebuilder:printcolumn
para agregar columnas a la salida del comando kubectl get my-crd.my-group.my-domain.com
?
Tengo una definición de recurso personalizado (CRD, por sus siglas en inglés) con las estructuras habituales para las especificaciones y el estado (similar a lo que se explica en el tutorial de Kubebuilder aquí: https://book.kubebuilder.io/cronjob-tutorial/new-api.html#adding-a-new-api).
Tengo una estructura de Estado como esta:
type ScheduleSetStatus struct {
// ¿Cuándo fue la última vez que el conjunto de programaciones
// se implementó correctamente?
LastDeployTime string `json:"lastDeployTime"` // metav1.Time
// Los CronJobs que se han implementado correctamente
DeployedCronJobs []string `json:"deployedCronJobs"`
// Los CronJobs que tuvieron errores durante la implementación.
ErroredCronJobs map[string]string `json:"erroredCronJobs"` // TODO serializable a JSON `error`
}
Esta tiene algunos problemas:
El campo de tiempo
- He intentado que sea de tipo
metav1.Time
(con un formato práctico como se indica en https://book.kubebuilder.io/cronjob-tutorial/api-design.html?highlight=metav1.Time#designing-an-api), pero luego este comentario// +kubebuilder:printcolumn:name="Last Deploy",type="date",JSONPath=
.status.lastDeployTime“ aparece vacío en la salida dekubectl
. - Entonces cambié el tipo a
string
(luego en el controlador hagooess.Status.LastDeployTime = fmt.Sprintf("%s", metav1.Time{Time: time.Now().UTC()})
), luego agregué el comentario+kubebuilder:printcolumn:name="Last Deploy",type=string,JSONPath=
.status.lastDeployTime“ pero aún el campo aparece vacío en la salida dekubectl
.
El campo de tipo slice []string
y el campo de tipo mapa map[string]string
- ¿Cómo configuro estos campos? Aquí no hay mención (al hacer clic en “Mostrar ayuda de argumentos detallada”): https://book.kubebuilder.io/reference/markers/crd.html
- En caso de que no sean “tipos simples” con problemas de formato al usar
kubectl
, ¿eso significa que la única opción que tengo es hacerlos de tipostring
con algún tipo defmt.Sprintf(...)
? - ¿Hay alguna otra opción?
davy.ai
Para especificar los comentarios como
+kubebuilder:printcolumn
y agregar columnas a la salida del comandokubectl get my-crd.my-group.my-domain.com
, debes seguir estos pasos:struct
) para los cuales deseas agregar columnas en la salida dekubectl
.+kubebuilder:printcolumn
, seguido de las opciones que deseas configurar para la columna.name
(el nombre a mostrar para la columna),type
(el tipo de datos de la columna),format
(para campos de tiempo, el formato a utilizar para mostrar el tiempo) yJSONPath
(la ruta JSON al campo).make
para regenerar el código.kubectl get my-crd.my-group.my-domain.com
y observa la salida con las nuevas columnas que agregaste.Por ejemplo, para agregar columnas para el campo
LastDeployTime
en tu estructuraScheduleSetStatus
, puedes utilizar el siguiente comentario:Este comentario establece el nombre de la columna como
Last Deploy
, el tipo de datos comodate
, el formato como2006-01-02 15:04:05
(el formato de tiempo estándar de Go) y la ruta JSON como.status.lastDeployTime
.Para los campos
DeployedCronJobs
yErroredCronJobs
, puedes seguir un enfoque similar para especificar los comentarios y opciones de las columnas que deseas agregar.