Kubernetes: UpdateStatus () para recursos personalizados não funcionam

Criado em 27 out. 2017  ·  1Comentário  ·  Fonte: kubernetes/kubernetes

/ tipo bug
/ sig api-maquinários
@ kubernetes / sig-api-machines-bugs

O que aconteceu :
Meu tipo de recurso personalizado possui um campo de status. Eu gerei um cliente para ele usando o genclient.
Aqui está a definição do meu tipo de 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"`
}

A função UpdateStatus () gerada:

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

Agora, quando chamo UpdateStatus () para um objeto Recovery (stash-mduabx), ocorre o seguinte erro:

the server could not find the requested resource (put recoveries.stash.appscode.com stash-mduabx)

E o log da chamada da 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

O que você esperava que acontecesse :
Deve atualizar o campo de status.

Como reproduzi-lo :
Defina um tipo de CRD com o campo de status e gere o cliente para ele usando o genclient. Crie um objeto desse tipo usando kubectl. Agora pegue o objeto do programa go e chame UpdateStatus () para o objeto.

Meio Ambiente :

  • Versão do Kubernetes: 1.7.5
arecustom-resources kinbug siapi-machinery

Comentários muito úteis

O cliente gera um método de status porque existe um campo de status, mas isso não significa que o servidor tenha suporte para esse método.

https://github.com/kubernetes/community/pull/913 é uma proposta para adicionar suporte de servidor para sub-recursos de status para objetos CRD.

>Todos os comentários

O cliente gera um método de status porque existe um campo de status, mas isso não significa que o servidor tenha suporte para esse método.

https://github.com/kubernetes/community/pull/913 é uma proposta para adicionar suporte de servidor para sub-recursos de status para objetos CRD.

Esta página foi útil?
0 / 5 - 0 avaliações