k8s_openapi/v1_32/api/storage/v1/
csi_node.rs

1// Generated from definition io.k8s.api.storage.v1.CSINode
2
3/// CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct CSINode {
6    /// Standard object's metadata. metadata.name must be the Kubernetes node name.
7    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
8
9    /// spec is the specification of CSINode
10    pub spec: crate::api::storage::v1::CSINodeSpec,
11}
12
13impl crate::Resource for CSINode {
14    const API_VERSION: &'static str = "storage.k8s.io/v1";
15    const GROUP: &'static str = "storage.k8s.io";
16    const KIND: &'static str = "CSINode";
17    const VERSION: &'static str = "v1";
18    const URL_PATH_SEGMENT: &'static str = "csinodes";
19    type Scope = crate::ClusterResourceScope;
20}
21
22impl crate::ListableResource for CSINode {
23    const LIST_KIND: &'static str = "CSINodeList";
24}
25
26impl crate::Metadata for CSINode {
27    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
28
29    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
30        &self.metadata
31    }
32
33    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
34        &mut self.metadata
35    }
36}
37
38impl crate::DeepMerge for CSINode {
39    fn merge_from(&mut self, other: Self) {
40        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
41        crate::DeepMerge::merge_from(&mut self.spec, other.spec);
42    }
43}
44
45impl<'de> crate::serde::Deserialize<'de> for CSINode {
46    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
47        #[allow(non_camel_case_types)]
48        enum Field {
49            Key_api_version,
50            Key_kind,
51            Key_metadata,
52            Key_spec,
53            Other,
54        }
55
56        impl<'de> crate::serde::Deserialize<'de> for Field {
57            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
58                struct Visitor;
59
60                impl crate::serde::de::Visitor<'_> for Visitor {
61                    type Value = Field;
62
63                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
64                        f.write_str("field identifier")
65                    }
66
67                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
68                        Ok(match v {
69                            "apiVersion" => Field::Key_api_version,
70                            "kind" => Field::Key_kind,
71                            "metadata" => Field::Key_metadata,
72                            "spec" => Field::Key_spec,
73                            _ => Field::Other,
74                        })
75                    }
76                }
77
78                deserializer.deserialize_identifier(Visitor)
79            }
80        }
81
82        struct Visitor;
83
84        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
85            type Value = CSINode;
86
87            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
88                f.write_str(<Self::Value as crate::Resource>::KIND)
89            }
90
91            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
92                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
93                let mut value_spec: Option<crate::api::storage::v1::CSINodeSpec> = None;
94
95                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
96                    match key {
97                        Field::Key_api_version => {
98                            let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
99                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
100                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
101                            }
102                        },
103                        Field::Key_kind => {
104                            let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
105                            if value_kind != <Self::Value as crate::Resource>::KIND {
106                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
107                            }
108                        },
109                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
110                        Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
111                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
112                    }
113                }
114
115                Ok(CSINode {
116                    metadata: value_metadata.unwrap_or_default(),
117                    spec: value_spec.unwrap_or_default(),
118                })
119            }
120        }
121
122        deserializer.deserialize_struct(
123            <Self as crate::Resource>::KIND,
124            &[
125                "apiVersion",
126                "kind",
127                "metadata",
128                "spec",
129            ],
130            Visitor,
131        )
132    }
133}
134
135impl crate::serde::Serialize for CSINode {
136    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
137        let mut state = serializer.serialize_struct(
138            <Self as crate::Resource>::KIND,
139            4,
140        )?;
141        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
142        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
143        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
144        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
145        crate::serde::ser::SerializeStruct::end(state)
146    }
147}
148
149#[cfg(feature = "schemars")]
150impl crate::schemars::JsonSchema for CSINode {
151    fn schema_name() -> String {
152        "io.k8s.api.storage.v1.CSINode".to_owned()
153    }
154
155    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
156        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
157            metadata: Some(Box::new(crate::schemars::schema::Metadata {
158                description: Some("CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.".to_owned()),
159                ..Default::default()
160            })),
161            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
162            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
163                properties: [
164                    (
165                        "apiVersion".to_owned(),
166                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
167                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
168                                description: Some("APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources".to_owned()),
169                                ..Default::default()
170                            })),
171                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
172                            ..Default::default()
173                        }),
174                    ),
175                    (
176                        "kind".to_owned(),
177                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
178                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
179                                description: Some("Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds".to_owned()),
180                                ..Default::default()
181                            })),
182                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
183                            ..Default::default()
184                        }),
185                    ),
186                    (
187                        "metadata".to_owned(),
188                        {
189                            let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>().into_object();
190                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
191                                description: Some("Standard object's metadata. metadata.name must be the Kubernetes node name.".to_owned()),
192                                ..Default::default()
193                            }));
194                            crate::schemars::schema::Schema::Object(schema_obj)
195                        },
196                    ),
197                    (
198                        "spec".to_owned(),
199                        {
200                            let mut schema_obj = __gen.subschema_for::<crate::api::storage::v1::CSINodeSpec>().into_object();
201                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
202                                description: Some("spec is the specification of CSINode".to_owned()),
203                                ..Default::default()
204                            }));
205                            crate::schemars::schema::Schema::Object(schema_obj)
206                        },
207                    ),
208                ].into(),
209                required: [
210                    "metadata".to_owned(),
211                    "spec".to_owned(),
212                ].into(),
213                ..Default::default()
214            })),
215            ..Default::default()
216        })
217    }
218}