kube_core

Trait Resource

Source
pub trait Resource {
    type DynamicType: Send + Sync + 'static;
    type Scope;

    // Required methods
    fn kind(dt: &Self::DynamicType) -> Cow<'_, str>;
    fn group(dt: &Self::DynamicType) -> Cow<'_, str>;
    fn version(dt: &Self::DynamicType) -> Cow<'_, str>;
    fn plural(dt: &Self::DynamicType) -> Cow<'_, str>;
    fn meta(&self) -> &ObjectMeta;
    fn meta_mut(&mut self) -> &mut ObjectMeta;

    // Provided methods
    fn api_version(dt: &Self::DynamicType) -> Cow<'_, str> { ... }
    fn url_path(dt: &Self::DynamicType, namespace: Option<&str>) -> String { ... }
    fn object_ref(&self, dt: &Self::DynamicType) -> ObjectReference { ... }
    fn controller_owner_ref(
        &self,
        dt: &Self::DynamicType,
    ) -> Option<OwnerReference> { ... }
    fn owner_ref(&self, dt: &Self::DynamicType) -> Option<OwnerReference> { ... }
}
Expand description

An accessor trait for a kubernetes Resource.

This is for a subset of Kubernetes type that do not end in List. These types, using ObjectMeta, SHOULD all have required properties:

  • .metadata
  • .metadata.name

And these optional properties:

  • .metadata.namespace
  • .metadata.resource_version

This avoids a bunch of the unnecessary unwrap mechanics for apps.

Required Associated Types§

Source

type DynamicType: Send + Sync + 'static

Type information for types that do not know their resource information at compile time.

Types that know their metadata at compile time should select DynamicType = (). Types that require some information at runtime should select DynamicType as type of this information.

See DynamicObject for a valid implementation of non-k8s-openapi resources.

Source

type Scope

Type information for the api scope of the resource when known at compile time

Types from k8s_openapi come with an explicit k8s_openapi::ResourceScope Dynamic types should select Scope = DynamicResourceScope

Required Methods§

Source

fn kind(dt: &Self::DynamicType) -> Cow<'_, str>

Returns kind of this object

Source

fn group(dt: &Self::DynamicType) -> Cow<'_, str>

Returns group of this object

Source

fn version(dt: &Self::DynamicType) -> Cow<'_, str>

Returns version of this object

Source

fn plural(dt: &Self::DynamicType) -> Cow<'_, str>

Returns the plural name of the kind

This is known as the resource in apimachinery, we rename it for disambiguation.

Source

fn meta(&self) -> &ObjectMeta

Metadata that all persisted resources must have

Source

fn meta_mut(&mut self) -> &mut ObjectMeta

Metadata that all persisted resources must have

Provided Methods§

Source

fn api_version(dt: &Self::DynamicType) -> Cow<'_, str>

Returns apiVersion of this object

Source

fn url_path(dt: &Self::DynamicType, namespace: Option<&str>) -> String

Creates a url path for http requests for this resource

Source

fn object_ref(&self, dt: &Self::DynamicType) -> ObjectReference

Generates an object reference for the resource

Source

fn controller_owner_ref(&self, dt: &Self::DynamicType) -> Option<OwnerReference>

Generates a controller owner reference pointing to this resource

Note: this returns an Option, but for objects populated from the apiserver, this Option can be safely unwrapped.

use k8s_openapi::api::core::v1::ConfigMap;
use k8s_openapi::api::core::v1::Pod;
use k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta;
use kube_core::Resource;

let p = Pod::default();
let controller_ref = p.controller_owner_ref(&());
let cm = ConfigMap {
    metadata: ObjectMeta {
        name: Some("pod-configmap".to_string()),
        owner_references: Some(controller_ref.into_iter().collect()),
        ..ObjectMeta::default()
    },
    ..Default::default()
};
Source

fn owner_ref(&self, dt: &Self::DynamicType) -> Option<OwnerReference>

Generates an owner reference pointing to this resource

Note: this returns an Option, but for objects populated from the apiserver, this Option can be safely unwrapped.

use k8s_openapi::api::core::v1::ConfigMap;
use k8s_openapi::api::core::v1::Pod;
use k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta;
use kube_core::Resource;

let p = Pod::default();
let owner_ref = p.owner_ref(&());
let cm = ConfigMap {
    metadata: ObjectMeta {
        name: Some("pod-configmap".to_string()),
        owner_references: Some(owner_ref.into_iter().collect()),
        ..ObjectMeta::default()
    },
    ..Default::default()
};

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Resource for DynamicObject

Source§

impl<K, S> Resource for K
where K: Metadata<Ty = ObjectMeta> + Resource<Scope = S>,

Implement accessor trait for any ObjectMeta-using Kubernetes Resource

Source§

impl<K: Resource> Resource for PartialObjectMeta<K>

Source§

impl<P, U> Resource for Object<P, U>
where P: Clone, U: Clone,