/genre bogue
/sig api-machines
@kubernetes/sig-api-machinery-bugs
Que s'est-il passé :
Mon type de ressource personnalisé a un champ de statut. J'ai généré un client pour cela en utilisant genclient.
Voici la définition de mon type CRD :
// +genclient
// +k8s:openapi-gen=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type Recovery struct {
metav1.TypeMeta `json:",inline,omitempty"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec RecoverySpec `json:"spec,omitempty"`
Status RecoveryStatus `json:"status,omitempty"`
}
La fonction UpdateStatus() générée :
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *recoveries) UpdateStatus(recovery *v1alpha1.Recovery) (result *v1alpha1.Recovery, err error) {
result = &v1alpha1.Recovery{}
err = c.client.Put().
Namespace(c.ns).
Resource("recoveries").
Name(recovery.Name).
SubResource("status").
Body(recovery).
Do().
Into(result)
return
}
Maintenant, lorsque j'appelle UpdateStatus() pour un objet de récupération (stash-mduabx), l'erreur suivante est générée :
the server could not find the requested resource (put recoveries.stash.appscode.com stash-mduabx)
Et le journal de l'appel api :
PUT https://192.168.99.100:8443/apis/stash.appscode.com/v1alpha1/namespaces/test-stash/recoveries/stash-mduabx/status 404 Not Found in 11 milliseconds
Ce à quoi vous vous attendiez :
Il devrait mettre à jour le champ d'état.
Comment le reproduire :
Définissez un type CRD avec un champ de statut et générez un client pour celui-ci à l'aide de genclient. Créez un objet de ce type à l'aide de kubectl. Maintenant, récupérez l'objet du programme go et appelez UpdateStatus() pour l'objet.
Environnement :
Le client génère une méthode d'état car il existe un champ d'état, mais cela ne signifie pas que le serveur prend en charge cette méthode.
https://github.com/kubernetes/community/pull/913 est une proposition visant à ajouter la prise en charge du serveur pour les sous-ressources d'état pour les objets CRD.
Commentaire le plus utile
Le client génère une méthode d'état car il existe un champ d'état, mais cela ne signifie pas que le serveur prend en charge cette méthode.
https://github.com/kubernetes/community/pull/913 est une proposition visant à ajouter la prise en charge du serveur pour les sous-ressources d'état pour les objets CRD.