openshift_openapi/v4_5/api/build/v1/
build_config_spec.rs

1// Generated from definition com.github.openshift.api.build.v1.BuildConfigSpec
2
3/// BuildConfigSpec describes when and how builds are created
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct BuildConfigSpec {
6    /// completionDeadlineSeconds is an optional duration in seconds, counted from the time when a build pod gets scheduled in the system, that the build may be active on a node before the system actively tries to terminate the build; value must be positive integer
7    pub completion_deadline_seconds: Option<i64>,
8
9    /// failedBuildsHistoryLimit is the number of old failed builds to retain. If not specified, all failed builds are retained.
10    pub failed_builds_history_limit: Option<i32>,
11
12    /// nodeSelector is a selector which must be true for the build pod to fit on a node If nil, it can be overridden by default build nodeselector values for the cluster. If set to an empty map or a map with any values, default build nodeselector values are ignored.
13    pub node_selector: std::collections::BTreeMap<String, String>,
14
15    /// output describes the container image the Strategy should produce.
16    pub output: Option<crate::api::build::v1::BuildOutput>,
17
18    /// postCommit is a build hook executed after the build output image is committed, before it is pushed to a registry.
19    pub post_commit: Option<crate::api::build::v1::BuildPostCommitSpec>,
20
21    /// resources computes resource requirements to execute the build.
22    pub resources: Option<k8s_openapi::api::core::v1::ResourceRequirements>,
23
24    /// revision is the information from the source for a specific repo snapshot. This is optional.
25    pub revision: Option<crate::api::build::v1::SourceRevision>,
26
27    /// RunPolicy describes how the new build created from this build configuration will be scheduled for execution. This is optional, if not specified we default to "Serial".
28    pub run_policy: Option<String>,
29
30    /// serviceAccount is the name of the ServiceAccount to use to run the pod created by this build. The pod will be allowed to use secrets referenced by the ServiceAccount
31    pub service_account: Option<String>,
32
33    /// source describes the SCM in use.
34    pub source: Option<crate::api::build::v1::BuildSource>,
35
36    /// strategy defines how to perform a build.
37    pub strategy: crate::api::build::v1::BuildStrategy,
38
39    /// successfulBuildsHistoryLimit is the number of old successful builds to retain. If not specified, all successful builds are retained.
40    pub successful_builds_history_limit: Option<i32>,
41
42    /// triggers determine how new Builds can be launched from a BuildConfig. If no triggers are defined, a new build can only occur as a result of an explicit client build creation.
43    pub triggers: Vec<crate::api::build::v1::BuildTriggerPolicy>,
44}
45
46impl<'de> serde::Deserialize<'de> for BuildConfigSpec {
47    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
48        #[allow(non_camel_case_types)]
49        enum Field {
50            Key_completion_deadline_seconds,
51            Key_failed_builds_history_limit,
52            Key_node_selector,
53            Key_output,
54            Key_post_commit,
55            Key_resources,
56            Key_revision,
57            Key_run_policy,
58            Key_service_account,
59            Key_source,
60            Key_strategy,
61            Key_successful_builds_history_limit,
62            Key_triggers,
63            Other,
64        }
65
66        impl<'de> serde::Deserialize<'de> for Field {
67            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
68                struct Visitor;
69
70                impl<'de> serde::de::Visitor<'de> 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: serde::de::Error {
78                        Ok(match v {
79                            "completionDeadlineSeconds" => Field::Key_completion_deadline_seconds,
80                            "failedBuildsHistoryLimit" => Field::Key_failed_builds_history_limit,
81                            "nodeSelector" => Field::Key_node_selector,
82                            "output" => Field::Key_output,
83                            "postCommit" => Field::Key_post_commit,
84                            "resources" => Field::Key_resources,
85                            "revision" => Field::Key_revision,
86                            "runPolicy" => Field::Key_run_policy,
87                            "serviceAccount" => Field::Key_service_account,
88                            "source" => Field::Key_source,
89                            "strategy" => Field::Key_strategy,
90                            "successfulBuildsHistoryLimit" => Field::Key_successful_builds_history_limit,
91                            "triggers" => Field::Key_triggers,
92                            _ => Field::Other,
93                        })
94                    }
95                }
96
97                deserializer.deserialize_identifier(Visitor)
98            }
99        }
100
101        struct Visitor;
102
103        impl<'de> serde::de::Visitor<'de> for Visitor {
104            type Value = BuildConfigSpec;
105
106            fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
107                f.write_str("BuildConfigSpec")
108            }
109
110            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: serde::de::MapAccess<'de> {
111                let mut value_completion_deadline_seconds: Option<i64> = None;
112                let mut value_failed_builds_history_limit: Option<i32> = None;
113                let mut value_node_selector: Option<std::collections::BTreeMap<String, String>> = None;
114                let mut value_output: Option<crate::api::build::v1::BuildOutput> = None;
115                let mut value_post_commit: Option<crate::api::build::v1::BuildPostCommitSpec> = None;
116                let mut value_resources: Option<k8s_openapi::api::core::v1::ResourceRequirements> = None;
117                let mut value_revision: Option<crate::api::build::v1::SourceRevision> = None;
118                let mut value_run_policy: Option<String> = None;
119                let mut value_service_account: Option<String> = None;
120                let mut value_source: Option<crate::api::build::v1::BuildSource> = None;
121                let mut value_strategy: Option<crate::api::build::v1::BuildStrategy> = None;
122                let mut value_successful_builds_history_limit: Option<i32> = None;
123                let mut value_triggers: Option<Vec<crate::api::build::v1::BuildTriggerPolicy>> = None;
124
125                while let Some(key) = serde::de::MapAccess::next_key::<Field>(&mut map)? {
126                    match key {
127                        Field::Key_completion_deadline_seconds => value_completion_deadline_seconds = serde::de::MapAccess::next_value(&mut map)?,
128                        Field::Key_failed_builds_history_limit => value_failed_builds_history_limit = serde::de::MapAccess::next_value(&mut map)?,
129                        Field::Key_node_selector => value_node_selector = Some(serde::de::MapAccess::next_value(&mut map)?),
130                        Field::Key_output => value_output = serde::de::MapAccess::next_value(&mut map)?,
131                        Field::Key_post_commit => value_post_commit = serde::de::MapAccess::next_value(&mut map)?,
132                        Field::Key_resources => value_resources = serde::de::MapAccess::next_value(&mut map)?,
133                        Field::Key_revision => value_revision = serde::de::MapAccess::next_value(&mut map)?,
134                        Field::Key_run_policy => value_run_policy = serde::de::MapAccess::next_value(&mut map)?,
135                        Field::Key_service_account => value_service_account = serde::de::MapAccess::next_value(&mut map)?,
136                        Field::Key_source => value_source = serde::de::MapAccess::next_value(&mut map)?,
137                        Field::Key_strategy => value_strategy = Some(serde::de::MapAccess::next_value(&mut map)?),
138                        Field::Key_successful_builds_history_limit => value_successful_builds_history_limit = serde::de::MapAccess::next_value(&mut map)?,
139                        Field::Key_triggers => value_triggers = Some(serde::de::MapAccess::next_value(&mut map)?),
140                        Field::Other => { let _: serde::de::IgnoredAny = serde::de::MapAccess::next_value(&mut map)?; },
141                    }
142                }
143
144                Ok(BuildConfigSpec {
145                    completion_deadline_seconds: value_completion_deadline_seconds,
146                    failed_builds_history_limit: value_failed_builds_history_limit,
147                    node_selector: value_node_selector.ok_or_else(|| serde::de::Error::missing_field("nodeSelector"))?,
148                    output: value_output,
149                    post_commit: value_post_commit,
150                    resources: value_resources,
151                    revision: value_revision,
152                    run_policy: value_run_policy,
153                    service_account: value_service_account,
154                    source: value_source,
155                    strategy: value_strategy.ok_or_else(|| serde::de::Error::missing_field("strategy"))?,
156                    successful_builds_history_limit: value_successful_builds_history_limit,
157                    triggers: value_triggers.ok_or_else(|| serde::de::Error::missing_field("triggers"))?,
158                })
159            }
160        }
161
162        deserializer.deserialize_struct(
163            "BuildConfigSpec",
164            &[
165                "completionDeadlineSeconds",
166                "failedBuildsHistoryLimit",
167                "nodeSelector",
168                "output",
169                "postCommit",
170                "resources",
171                "revision",
172                "runPolicy",
173                "serviceAccount",
174                "source",
175                "strategy",
176                "successfulBuildsHistoryLimit",
177                "triggers",
178            ],
179            Visitor,
180        )
181    }
182}
183
184impl serde::Serialize for BuildConfigSpec {
185    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
186        let mut state = serializer.serialize_struct(
187            "BuildConfigSpec",
188            3 +
189            self.completion_deadline_seconds.as_ref().map_or(0, |_| 1) +
190            self.failed_builds_history_limit.as_ref().map_or(0, |_| 1) +
191            self.output.as_ref().map_or(0, |_| 1) +
192            self.post_commit.as_ref().map_or(0, |_| 1) +
193            self.resources.as_ref().map_or(0, |_| 1) +
194            self.revision.as_ref().map_or(0, |_| 1) +
195            self.run_policy.as_ref().map_or(0, |_| 1) +
196            self.service_account.as_ref().map_or(0, |_| 1) +
197            self.source.as_ref().map_or(0, |_| 1) +
198            self.successful_builds_history_limit.as_ref().map_or(0, |_| 1),
199        )?;
200        if let Some(value) = &self.completion_deadline_seconds {
201            serde::ser::SerializeStruct::serialize_field(&mut state, "completionDeadlineSeconds", value)?;
202        }
203        if let Some(value) = &self.failed_builds_history_limit {
204            serde::ser::SerializeStruct::serialize_field(&mut state, "failedBuildsHistoryLimit", value)?;
205        }
206        serde::ser::SerializeStruct::serialize_field(&mut state, "nodeSelector", &self.node_selector)?;
207        if let Some(value) = &self.output {
208            serde::ser::SerializeStruct::serialize_field(&mut state, "output", value)?;
209        }
210        if let Some(value) = &self.post_commit {
211            serde::ser::SerializeStruct::serialize_field(&mut state, "postCommit", value)?;
212        }
213        if let Some(value) = &self.resources {
214            serde::ser::SerializeStruct::serialize_field(&mut state, "resources", value)?;
215        }
216        if let Some(value) = &self.revision {
217            serde::ser::SerializeStruct::serialize_field(&mut state, "revision", value)?;
218        }
219        if let Some(value) = &self.run_policy {
220            serde::ser::SerializeStruct::serialize_field(&mut state, "runPolicy", value)?;
221        }
222        if let Some(value) = &self.service_account {
223            serde::ser::SerializeStruct::serialize_field(&mut state, "serviceAccount", value)?;
224        }
225        if let Some(value) = &self.source {
226            serde::ser::SerializeStruct::serialize_field(&mut state, "source", value)?;
227        }
228        serde::ser::SerializeStruct::serialize_field(&mut state, "strategy", &self.strategy)?;
229        if let Some(value) = &self.successful_builds_history_limit {
230            serde::ser::SerializeStruct::serialize_field(&mut state, "successfulBuildsHistoryLimit", value)?;
231        }
232        serde::ser::SerializeStruct::serialize_field(&mut state, "triggers", &self.triggers)?;
233        serde::ser::SerializeStruct::end(state)
234    }
235}