k8s_openapi/v1_32/api/certificates/v1/
certificate_signing_request.rs

1// Generated from definition io.k8s.api.certificates.v1.CertificateSigningRequest
2
3/// CertificateSigningRequest objects provide a mechanism to obtain x509 certificates by submitting a certificate signing request, and having it asynchronously approved and issued.
4///
5/// Kubelets use this API to obtain:
6///  1. client certificates to authenticate to kube-apiserver (with the "kubernetes.io/kube-apiserver-client-kubelet" signerName).
7///  2. serving certificates for TLS endpoints kube-apiserver can connect to securely (with the "kubernetes.io/kubelet-serving" signerName).
8///
9/// This API can be used to request client certificates to authenticate to kube-apiserver (with the "kubernetes.io/kube-apiserver-client" signerName), or to obtain certificates from custom non-Kubernetes signers.
10#[derive(Clone, Debug, Default, PartialEq)]
11pub struct CertificateSigningRequest {
12    pub metadata: crate::apimachinery::pkg::apis::meta::v1::ObjectMeta,
13
14    /// spec contains the certificate request, and is immutable after creation. Only the request, signerName, expirationSeconds, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.
15    pub spec: crate::api::certificates::v1::CertificateSigningRequestSpec,
16
17    /// status contains information about whether the request is approved or denied, and the certificate issued by the signer, or the failure condition indicating signer failure.
18    pub status: Option<crate::api::certificates::v1::CertificateSigningRequestStatus>,
19}
20
21impl crate::Resource for CertificateSigningRequest {
22    const API_VERSION: &'static str = "certificates.k8s.io/v1";
23    const GROUP: &'static str = "certificates.k8s.io";
24    const KIND: &'static str = "CertificateSigningRequest";
25    const VERSION: &'static str = "v1";
26    const URL_PATH_SEGMENT: &'static str = "certificatesigningrequests";
27    type Scope = crate::ClusterResourceScope;
28}
29
30impl crate::ListableResource for CertificateSigningRequest {
31    const LIST_KIND: &'static str = "CertificateSigningRequestList";
32}
33
34impl crate::Metadata for CertificateSigningRequest {
35    type Ty = crate::apimachinery::pkg::apis::meta::v1::ObjectMeta;
36
37    fn metadata(&self) -> &<Self as crate::Metadata>::Ty {
38        &self.metadata
39    }
40
41    fn metadata_mut(&mut self) -> &mut<Self as crate::Metadata>::Ty {
42        &mut self.metadata
43    }
44}
45
46impl crate::DeepMerge for CertificateSigningRequest {
47    fn merge_from(&mut self, other: Self) {
48        crate::DeepMerge::merge_from(&mut self.metadata, other.metadata);
49        crate::DeepMerge::merge_from(&mut self.spec, other.spec);
50        crate::DeepMerge::merge_from(&mut self.status, other.status);
51    }
52}
53
54impl<'de> crate::serde::Deserialize<'de> for CertificateSigningRequest {
55    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
56        #[allow(non_camel_case_types)]
57        enum Field {
58            Key_api_version,
59            Key_kind,
60            Key_metadata,
61            Key_spec,
62            Key_status,
63            Other,
64        }
65
66        impl<'de> crate::serde::Deserialize<'de> for Field {
67            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
68                struct Visitor;
69
70                impl crate::serde::de::Visitor<'_> for Visitor {
71                    type Value = Field;
72
73                    fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
74                        f.write_str("field identifier")
75                    }
76
77                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
78                        Ok(match v {
79                            "apiVersion" => Field::Key_api_version,
80                            "kind" => Field::Key_kind,
81                            "metadata" => Field::Key_metadata,
82                            "spec" => Field::Key_spec,
83                            "status" => Field::Key_status,
84                            _ => Field::Other,
85                        })
86                    }
87                }
88
89                deserializer.deserialize_identifier(Visitor)
90            }
91        }
92
93        struct Visitor;
94
95        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
96            type Value = CertificateSigningRequest;
97
98            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
99                f.write_str(<Self::Value as crate::Resource>::KIND)
100            }
101
102            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
103                let mut value_metadata: Option<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta> = None;
104                let mut value_spec: Option<crate::api::certificates::v1::CertificateSigningRequestSpec> = None;
105                let mut value_status: Option<crate::api::certificates::v1::CertificateSigningRequestStatus> = None;
106
107                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
108                    match key {
109                        Field::Key_api_version => {
110                            let value_api_version: String = crate::serde::de::MapAccess::next_value(&mut map)?;
111                            if value_api_version != <Self::Value as crate::Resource>::API_VERSION {
112                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_api_version), &<Self::Value as crate::Resource>::API_VERSION));
113                            }
114                        },
115                        Field::Key_kind => {
116                            let value_kind: String = crate::serde::de::MapAccess::next_value(&mut map)?;
117                            if value_kind != <Self::Value as crate::Resource>::KIND {
118                                return Err(crate::serde::de::Error::invalid_value(crate::serde::de::Unexpected::Str(&value_kind), &<Self::Value as crate::Resource>::KIND));
119                            }
120                        },
121                        Field::Key_metadata => value_metadata = crate::serde::de::MapAccess::next_value(&mut map)?,
122                        Field::Key_spec => value_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
123                        Field::Key_status => value_status = crate::serde::de::MapAccess::next_value(&mut map)?,
124                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
125                    }
126                }
127
128                Ok(CertificateSigningRequest {
129                    metadata: value_metadata.unwrap_or_default(),
130                    spec: value_spec.unwrap_or_default(),
131                    status: value_status,
132                })
133            }
134        }
135
136        deserializer.deserialize_struct(
137            <Self as crate::Resource>::KIND,
138            &[
139                "apiVersion",
140                "kind",
141                "metadata",
142                "spec",
143                "status",
144            ],
145            Visitor,
146        )
147    }
148}
149
150impl crate::serde::Serialize for CertificateSigningRequest {
151    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
152        let mut state = serializer.serialize_struct(
153            <Self as crate::Resource>::KIND,
154            4 +
155            self.status.as_ref().map_or(0, |_| 1),
156        )?;
157        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "apiVersion", <Self as crate::Resource>::API_VERSION)?;
158        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kind", <Self as crate::Resource>::KIND)?;
159        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "metadata", &self.metadata)?;
160        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "spec", &self.spec)?;
161        if let Some(value) = &self.status {
162            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "status", value)?;
163        }
164        crate::serde::ser::SerializeStruct::end(state)
165    }
166}
167
168#[cfg(feature = "schemars")]
169impl crate::schemars::JsonSchema for CertificateSigningRequest {
170    fn schema_name() -> String {
171        "io.k8s.api.certificates.v1.CertificateSigningRequest".to_owned()
172    }
173
174    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
175        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
176            metadata: Some(Box::new(crate::schemars::schema::Metadata {
177                description: Some("CertificateSigningRequest objects provide a mechanism to obtain x509 certificates by submitting a certificate signing request, and having it asynchronously approved and issued.\n\nKubelets use this API to obtain:\n 1. client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client-kubelet\" signerName).\n 2. serving certificates for TLS endpoints kube-apiserver can connect to securely (with the \"kubernetes.io/kubelet-serving\" signerName).\n\nThis API can be used to request client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client\" signerName), or to obtain certificates from custom non-Kubernetes signers.".to_owned()),
178                ..Default::default()
179            })),
180            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
181            object: Some(Box::new(crate::schemars::schema::ObjectValidation {
182                properties: [
183                    (
184                        "apiVersion".to_owned(),
185                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
186                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
187                                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()),
188                                ..Default::default()
189                            })),
190                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
191                            ..Default::default()
192                        }),
193                    ),
194                    (
195                        "kind".to_owned(),
196                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
197                            metadata: Some(Box::new(crate::schemars::schema::Metadata {
198                                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()),
199                                ..Default::default()
200                            })),
201                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::String))),
202                            ..Default::default()
203                        }),
204                    ),
205                    (
206                        "metadata".to_owned(),
207                        __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::ObjectMeta>(),
208                    ),
209                    (
210                        "spec".to_owned(),
211                        {
212                            let mut schema_obj = __gen.subschema_for::<crate::api::certificates::v1::CertificateSigningRequestSpec>().into_object();
213                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
214                                description: Some("spec contains the certificate request, and is immutable after creation. Only the request, signerName, expirationSeconds, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.".to_owned()),
215                                ..Default::default()
216                            }));
217                            crate::schemars::schema::Schema::Object(schema_obj)
218                        },
219                    ),
220                    (
221                        "status".to_owned(),
222                        {
223                            let mut schema_obj = __gen.subschema_for::<crate::api::certificates::v1::CertificateSigningRequestStatus>().into_object();
224                            schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
225                                description: Some("status contains information about whether the request is approved or denied, and the certificate issued by the signer, or the failure condition indicating signer failure.".to_owned()),
226                                ..Default::default()
227                            }));
228                            crate::schemars::schema::Schema::Object(schema_obj)
229                        },
230                    ),
231                ].into(),
232                required: [
233                    "metadata".to_owned(),
234                    "spec".to_owned(),
235                ].into(),
236                ..Default::default()
237            })),
238            ..Default::default()
239        })
240    }
241}