kube icon indicating copy to clipboard operation
kube copied to clipboard

Create `APIResource` from `ApiResource` for extension an `APIService`

Open clux opened this issue 2 years ago • 1 comments

What problem are you trying to solve?

Reading this blog post: https://metalbear.co/blog/writing-a-kubernetes-operator/ on how to set up an extension apiservice with kube, most of how this is done looks reasonably easy.

However, there's awkward step where it's necessary to convert our Resource to an APIResource. That bit is basically what you see in their source here: https://github.com/metalbear-co/farm-operator/blob/f7ae23f61daff4bdc9b9063796bc49057c20e914/example/step-3/src/main.rs#L14-L36

i.e. manually converting between the two:

APIResource {
    group: Some(llama::Llama::group(&()).into()),
    kind: llama::Llama::kind(&()).into(),
    name: llama::Llama::plural(&()).into(),
    namespaced: true,
    verbs: vec!["list".to_string(), "get".to_string()],
    ..Default::default()
},

This came up in https://github.com/kube-rs/website/pull/34#issuecomment-1475905161

Describe the solution you'd like

The example above is converting using the Resource trait, but that is actually insufficient (hence the manually supplied verbs).

The only place that has all that information for us is the ApiResource.

This feels like a simple Into<APIResource> for ApiResource impl.

If anyone wants to do this, it should be an easy one.

Note that CRD users via kube-derive will have access to their own ApiResource without going through discovery (which crucially they can't do as they are the apiserver for this resource) by using CustomResourceExt::api_resource. So from there, a converter will fill in the rest.

Target crate for feature

kube-core

clux avatar Apr 08 '23 19:04 clux

Turns out we can't do this cleanly yet because we'd actually need to do that into impl from the pair (ApiResource, ApiCapabilities).

There is an ongoing (but bitrotted) PR that aims to consolidate these structs, but need to fix that up first.

clux avatar Apr 09 '23 20:04 clux