Kubernetes: UpdateStatus() für benutzerdefinierte Ressourcen funktioniert nicht

Erstellt am 27. Okt. 2017  ·  1Kommentar  ·  Quelle: kubernetes/kubernetes

/ 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 :

  • Kubernetes-Version: 1.7.5
arecustom-resources kinbug siapi-machinery

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.

>Alle Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen