k8s_openapi/v1_34/api/core/v1/
iscsi_volume_source.rs

1// Generated from definition io.k8s.api.core.v1.ISCSIVolumeSource
2
3/// Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ISCSIVolumeSource {
6    /// chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication
7    pub chap_auth_discovery: Option<bool>,
8
9    /// chapAuthSession defines whether support iSCSI Session CHAP authentication
10    pub chap_auth_session: Option<bool>,
11
12    /// fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
13    pub fs_type: Option<std::string::String>,
14
15    /// initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \<target portal\>:\<volume name\> will be created for the connection.
16    pub initiator_name: Option<std::string::String>,
17
18    /// iqn is the target iSCSI Qualified Name.
19    pub iqn: std::string::String,
20
21    /// iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
22    pub iscsi_interface: Option<std::string::String>,
23
24    /// lun represents iSCSI Target Lun number.
25    pub lun: i32,
26
27    /// portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
28    pub portals: Option<std::vec::Vec<std::string::String>>,
29
30    /// readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
31    pub read_only: Option<bool>,
32
33    /// secretRef is the CHAP Secret for iSCSI target and initiator authentication
34    pub secret_ref: Option<crate::api::core::v1::LocalObjectReference>,
35
36    /// targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
37    pub target_portal: std::string::String,
38}
39
40impl crate::DeepMerge for ISCSIVolumeSource {
41    fn merge_from(&mut self, other: Self) {
42        crate::DeepMerge::merge_from(&mut self.chap_auth_discovery, other.chap_auth_discovery);
43        crate::DeepMerge::merge_from(&mut self.chap_auth_session, other.chap_auth_session);
44        crate::DeepMerge::merge_from(&mut self.fs_type, other.fs_type);
45        crate::DeepMerge::merge_from(&mut self.initiator_name, other.initiator_name);
46        crate::DeepMerge::merge_from(&mut self.iqn, other.iqn);
47        crate::DeepMerge::merge_from(&mut self.iscsi_interface, other.iscsi_interface);
48        crate::DeepMerge::merge_from(&mut self.lun, other.lun);
49        crate::merge_strategies::list::atomic(&mut self.portals, other.portals);
50        crate::DeepMerge::merge_from(&mut self.read_only, other.read_only);
51        crate::DeepMerge::merge_from(&mut self.secret_ref, other.secret_ref);
52        crate::DeepMerge::merge_from(&mut self.target_portal, other.target_portal);
53    }
54}
55
56impl<'de> crate::serde::Deserialize<'de> for ISCSIVolumeSource {
57    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
58        #[allow(non_camel_case_types)]
59        enum Field {
60            Key_chap_auth_discovery,
61            Key_chap_auth_session,
62            Key_fs_type,
63            Key_initiator_name,
64            Key_iqn,
65            Key_iscsi_interface,
66            Key_lun,
67            Key_portals,
68            Key_read_only,
69            Key_secret_ref,
70            Key_target_portal,
71            Other,
72        }
73
74        impl<'de> crate::serde::Deserialize<'de> for Field {
75            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
76                struct Visitor;
77
78                impl crate::serde::de::Visitor<'_> for Visitor {
79                    type Value = Field;
80
81                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
82                        f.write_str("field identifier")
83                    }
84
85                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
86                        Ok(match v {
87                            "chapAuthDiscovery" => Field::Key_chap_auth_discovery,
88                            "chapAuthSession" => Field::Key_chap_auth_session,
89                            "fsType" => Field::Key_fs_type,
90                            "initiatorName" => Field::Key_initiator_name,
91                            "iqn" => Field::Key_iqn,
92                            "iscsiInterface" => Field::Key_iscsi_interface,
93                            "lun" => Field::Key_lun,
94                            "portals" => Field::Key_portals,
95                            "readOnly" => Field::Key_read_only,
96                            "secretRef" => Field::Key_secret_ref,
97                            "targetPortal" => Field::Key_target_portal,
98                            _ => Field::Other,
99                        })
100                    }
101                }
102
103                deserializer.deserialize_identifier(Visitor)
104            }
105        }
106
107        struct Visitor;
108
109        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
110            type Value = ISCSIVolumeSource;
111
112            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
113                f.write_str("ISCSIVolumeSource")
114            }
115
116            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
117                let mut value_chap_auth_discovery: Option<bool> = None;
118                let mut value_chap_auth_session: Option<bool> = None;
119                let mut value_fs_type: Option<std::string::String> = None;
120                let mut value_initiator_name: Option<std::string::String> = None;
121                let mut value_iqn: Option<std::string::String> = None;
122                let mut value_iscsi_interface: Option<std::string::String> = None;
123                let mut value_lun: Option<i32> = None;
124                let mut value_portals: Option<std::vec::Vec<std::string::String>> = None;
125                let mut value_read_only: Option<bool> = None;
126                let mut value_secret_ref: Option<crate::api::core::v1::LocalObjectReference> = None;
127                let mut value_target_portal: Option<std::string::String> = None;
128
129                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
130                    match key {
131                        Field::Key_chap_auth_discovery => value_chap_auth_discovery = crate::serde::de::MapAccess::next_value(&mut map)?,
132                        Field::Key_chap_auth_session => value_chap_auth_session = crate::serde::de::MapAccess::next_value(&mut map)?,
133                        Field::Key_fs_type => value_fs_type = crate::serde::de::MapAccess::next_value(&mut map)?,
134                        Field::Key_initiator_name => value_initiator_name = crate::serde::de::MapAccess::next_value(&mut map)?,
135                        Field::Key_iqn => value_iqn = crate::serde::de::MapAccess::next_value(&mut map)?,
136                        Field::Key_iscsi_interface => value_iscsi_interface = crate::serde::de::MapAccess::next_value(&mut map)?,
137                        Field::Key_lun => value_lun = crate::serde::de::MapAccess::next_value(&mut map)?,
138                        Field::Key_portals => value_portals = crate::serde::de::MapAccess::next_value(&mut map)?,
139                        Field::Key_read_only => value_read_only = crate::serde::de::MapAccess::next_value(&mut map)?,
140                        Field::Key_secret_ref => value_secret_ref = crate::serde::de::MapAccess::next_value(&mut map)?,
141                        Field::Key_target_portal => value_target_portal = crate::serde::de::MapAccess::next_value(&mut map)?,
142                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
143                    }
144                }
145
146                Ok(ISCSIVolumeSource {
147                    chap_auth_discovery: value_chap_auth_discovery,
148                    chap_auth_session: value_chap_auth_session,
149                    fs_type: value_fs_type,
150                    initiator_name: value_initiator_name,
151                    iqn: value_iqn.unwrap_or_default(),
152                    iscsi_interface: value_iscsi_interface,
153                    lun: value_lun.unwrap_or_default(),
154                    portals: value_portals,
155                    read_only: value_read_only,
156                    secret_ref: value_secret_ref,
157                    target_portal: value_target_portal.unwrap_or_default(),
158                })
159            }
160        }
161
162        deserializer.deserialize_struct(
163            "ISCSIVolumeSource",
164            &[
165                "chapAuthDiscovery",
166                "chapAuthSession",
167                "fsType",
168                "initiatorName",
169                "iqn",
170                "iscsiInterface",
171                "lun",
172                "portals",
173                "readOnly",
174                "secretRef",
175                "targetPortal",
176            ],
177            Visitor,
178        )
179    }
180}
181
182impl crate::serde::Serialize for ISCSIVolumeSource {
183    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
184        let mut state = serializer.serialize_struct(
185            "ISCSIVolumeSource",
186            3 +
187            self.chap_auth_discovery.as_ref().map_or(0, |_| 1) +
188            self.chap_auth_session.as_ref().map_or(0, |_| 1) +
189            self.fs_type.as_ref().map_or(0, |_| 1) +
190            self.initiator_name.as_ref().map_or(0, |_| 1) +
191            self.iscsi_interface.as_ref().map_or(0, |_| 1) +
192            self.portals.as_ref().map_or(0, |_| 1) +
193            self.read_only.as_ref().map_or(0, |_| 1) +
194            self.secret_ref.as_ref().map_or(0, |_| 1),
195        )?;
196        if let Some(value) = &self.chap_auth_discovery {
197            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "chapAuthDiscovery", value)?;
198        }
199        if let Some(value) = &self.chap_auth_session {
200            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "chapAuthSession", value)?;
201        }
202        if let Some(value) = &self.fs_type {
203            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "fsType", value)?;
204        }
205        if let Some(value) = &self.initiator_name {
206            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "initiatorName", value)?;
207        }
208        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "iqn", &self.iqn)?;
209        if let Some(value) = &self.iscsi_interface {
210            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "iscsiInterface", value)?;
211        }
212        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "lun", &self.lun)?;
213        if let Some(value) = &self.portals {
214            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "portals", value)?;
215        }
216        if let Some(value) = &self.read_only {
217            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "readOnly", value)?;
218        }
219        if let Some(value) = &self.secret_ref {
220            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "secretRef", value)?;
221        }
222        crate::serde::ser::SerializeStruct::serialize_field(&mut state, "targetPortal", &self.target_portal)?;
223        crate::serde::ser::SerializeStruct::end(state)
224    }
225}
226
227#[cfg(feature = "schemars")]
228impl crate::schemars::JsonSchema for ISCSIVolumeSource {
229    fn schema_name() -> std::borrow::Cow<'static, str> {
230        "io.k8s.api.core.v1.ISCSIVolumeSource".into()
231    }
232
233    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
234        crate::schemars::json_schema!({
235            "description": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.",
236            "type": "object",
237            "properties": {
238                "chapAuthDiscovery": {
239                    "description": "chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication",
240                    "type": "boolean",
241                },
242                "chapAuthSession": {
243                    "description": "chapAuthSession defines whether support iSCSI Session CHAP authentication",
244                    "type": "boolean",
245                },
246                "fsType": {
247                    "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi",
248                    "type": "string",
249                },
250                "initiatorName": {
251                    "description": "initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.",
252                    "type": "string",
253                },
254                "iqn": {
255                    "description": "iqn is the target iSCSI Qualified Name.",
256                    "type": "string",
257                },
258                "iscsiInterface": {
259                    "description": "iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).",
260                    "type": "string",
261                },
262                "lun": {
263                    "description": "lun represents iSCSI Target Lun number.",
264                    "type": "integer",
265                    "format": "int32",
266                },
267                "portals": {
268                    "description": "portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
269                    "type": "array",
270                    "items": {
271                        "type": "string",
272                    },
273                },
274                "readOnly": {
275                    "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.",
276                    "type": "boolean",
277                },
278                "secretRef": ({
279                    let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::LocalObjectReference>();
280                    schema_obj.ensure_object().insert("description".into(), "secretRef is the CHAP Secret for iSCSI target and initiator authentication".into());
281                    schema_obj
282                }),
283                "targetPortal": {
284                    "description": "targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
285                    "type": "string",
286                },
287            },
288            "required": [
289                "iqn",
290                "lun",
291                "targetPortal",
292            ],
293        })
294    }
295}