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§