/ freundlicher Fehler
/sig-API-Maschinen
@kubernetes/sig-api-machinery-bugs
Was ist passiert :
Mein benutzerdefinierter Ressourcentyp hat ein Statusfeld. Ich habe einen Client dafür mit genclient generiert.
Hier ist die Definition meines CRD-Typs:
// +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"`
}
Die generierte UpdateStatus()-Funktion:
// 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
}
Wenn ich jetzt UpdateStatus () für ein Wiederherstellungsobjekt (stash-mduabx) aufrufe, wird der folgende Fehler ausgegeben:
the server could not find the requested resource (put recoveries.stash.appscode.com stash-mduabx)
Und das Protokoll des API-Aufrufs:
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
Was Sie erwartet haben, zu passieren :
Es sollte das Statusfeld aktualisieren.
So reproduzieren Sie es :
Definieren Sie einen CRD-Typ mit Statusfeld und generieren Sie dafür Client mit genclient. Erstellen Sie mit kubectl ein Objekt dieses Typs. Holen Sie sich nun das Objekt aus dem Programm go und rufen Sie UpdateStatus() für das Objekt auf.
Umgebung :
Der Client generiert eine Statusmethode, weil ein Statusfeld vorhanden ist, aber das bedeutet nicht, dass der Server diese Methode unterstützt.
https://github.com/kubernetes/community/pull/913 ist ein Vorschlag zum Hinzufügen von Serverunterstützung für Statusunterressourcen für CRD-Objekte.
Hilfreichster Kommentar
Der Client generiert eine Statusmethode, weil ein Statusfeld vorhanden ist, aber das bedeutet nicht, dass der Server diese Methode unterstützt.
https://github.com/kubernetes/community/pull/913 ist ein Vorschlag zum Hinzufügen von Serverunterstützung für Statusunterressourcen für CRD-Objekte.