2016-03-22 21 views
5

Con il comando, posso aggiungere l'etichetta come di seguitokubernetes API: aggiungere l'etichetta Pod

kubectl label pod POD_NAME KEY1=VALUE1 Come potrei farlo da kubernetes API?

Credo che può essere fatto da PATCH /api/v1/namespaces/{namespace}/pods/{name}

Ecco pod.json

{ 
    "apiVersion": "v1", 
    "kind": "Pod", 
    "metadata": { 
     "labels": { 
      "key1": "value1" 
     } 
    } 
} 

ho provato con seguente comando

KUBE_TOKEN=$(</var/run/secrets/kubernetes.io/serviceaccount/token) 
curl --request PATCH --insecure \ 
     --header "Authorization: Bearer $KUBE_TOKEN" \ 
     --data "$(cat pod.json)" \ 
     https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/$POD_NAMESPACE/pods/$POD_NAME 

e restituisce

{ 
    "kind": "Status", 
    "apiVersion": "v1", 
    "metadata": {}, 
    "status": "Failure", 
    "message": "the server responded with the status code 415 but did not return more information", 
    "details": {}, 
    "code": 415 
} 

risposta

5

Impostare il tipo di contenuto su application/json-patch+json e specificare la patch nel formato http://jsonpatch.org.

$ cat > patch.json <<EOF 
[ 
{ 
"op": "add", "path": "/metadata/labels/hello", "value": "world" 
} 
] 
EOF 
$ curl --request PATCH --data "$(cat patch.json)" -H "Content-Type:application/json-patch+json" https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/$POD_NAMESPACE/pods/$POD_NAME 
+0

'Content-Type: application/merge-planare + json' funziona per me –

+0

Ho fatto questo per aggiungere semplici etichette come: "ciao = mondo", nell'esempio di cui sopra. Ma puoi usare questo approccio per aggiungere un'etichetta come: "dominio.com/hello=world"? "percorso": "/ metadata/labels/domain.com/hello" non sembra funzionare, né i vari metodi che ho provato a sfuggire alla "/" in "dominio.com/hello". –

+0

Hai provato a unire patch. Cerca l'unione in https://github.com/kubernetes/kubernetes/blob/master/docs/devel/api-conventions.md –

Problemi correlati