es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 de kubectl.
  • Entonces cambié el tipo a string (luego en el controlador hago oess.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 de kubectl.

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 tipo string con algún tipo de fmt.Sprintf(...)?
  • ¿Hay alguna otra opción?
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para especificar los comentarios como +kubebuilder:printcolumn y agregar columnas a la salida del comando kubectl get my-crd.my-group.my-domain.com, debes seguir estos pasos:

    1. Define los campos en tu estructura CRD (struct) para los cuales deseas agregar columnas en la salida de kubectl.
    2. Agrega comentarios a estos campos con +kubebuilder:printcolumn, seguido de las opciones que deseas configurar para la columna.
    3. Las opciones que puedes configurar incluyen 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) y JSONPath (la ruta JSON al campo).
    4. Guarda tus cambios y ejecuta el comando make para regenerar el código.
    5. Ejecuta 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 estructura ScheduleSetStatus, puedes utilizar el siguiente comentario:

    type ScheduleSetStatus struct {
        // When was the last time the Schedule Set
        // was successfully deployed.
        LastDeployTime string `json:"lastDeployTime,omitempty"`
        // +kubebuilder:printcolumn:name="Last Deploy",type="date",format="2006-01-02 15:04:05",JSONPath=".status.lastDeployTime"
        // metav1.Time
        // The CronJobs that have been successfully deployed
        DeployedCronJobs []string `json:"deployedCronJobs,omitempty"`
        // The CronJobs that had errors when the deployment
        // has been attempted.
        ErroredCronJobs map[string]string `json:"erroredCronJobs,omitempty"`
    }
    
    

    Este comentario establece el nombre de la columna como Last Deploy, el tipo de datos como date, el formato como 2006-01-02 15:04:05 (el formato de tiempo estándar de Go) y la ruta JSON como .status.lastDeployTime.

    Para los campos DeployedCronJobs y ErroredCronJobs, puedes seguir un enfoque similar para especificar los comentarios y opciones de las columnas que deseas agregar.

Comments are closed.