kontena / k8s-client

Ruby Kubernetes API client
Apache License 2.0
76 stars 26 forks source link

create on subresource defunct #173

Open scones opened 3 years ago

scones commented 3 years ago

i am trying to create an eviction for a pod using the eviction api.

using

    eviction = K8s::Resource.new(
      apiVersion: "policy/v1beta1",
      "kind": "Eviction",
      "metadata": {
        "name": pod.metadata.name,
        "namespace": pod.metadata.namespace
      }
    )
    $client.api('v1').resource('pods/eviction').create_resource(eviction)

i get:

/gem/path/k8s-client-35b5020f99de/lib/k8s/transport.rb:261:in `parse_response': POST /cluster/path/api/v1/namespaces/some-namespace/pods => HTTP 400 Bad Request: Eviction in version "v1beta1" cannot be handled as a Pod: converting (v1beta1.Eviction) to (core.Pod): Spec not present in src (K8s::Error::BadRequest)

considering https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/ the correct path for the post should be /api/v1/namespaces/some-namespace/pods/some-pod/eviction

this obviously can't work right now, as i have no interface to set the pod within the request.

leaving me to ask for a feature to cover this :)

scones commented 3 years ago

i made a workaround for myself using this:

module K8s
  class ResourceClient
    def create_sub_resource resource
      @transport.request(
        method: 'POST',
        path: path(resource.metadata.name, namespace: resource.metadata.namespace),
        request_object: resource,
        response_class: @resource_class
      )
    end
  end
end

if others have a similar problem.