Skip to content

Commit bb57a30

Browse files
committed
Added image_pull_secrets to PodBuilder (#419)
1 parent 59306d1 commit bb57a30

File tree

1 file changed

+40
-8
lines changed

1 file changed

+40
-8
lines changed

src/builder/pod/mod.rs

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ use crate::error::{Error, OperatorResult};
77

88
use k8s_openapi::{
99
api::core::v1::{
10-
Affinity, Container, NodeAffinity, NodeSelector, NodeSelectorRequirement, NodeSelectorTerm,
11-
Pod, PodAffinity, PodCondition, PodSecurityContext, PodSpec, PodStatus, PodTemplateSpec,
12-
Toleration, Volume,
10+
Affinity, Container, LocalObjectReference, NodeAffinity, NodeSelector,
11+
NodeSelectorRequirement, NodeSelectorTerm, Pod, PodAffinity, PodCondition,
12+
PodSecurityContext, PodSpec, PodStatus, PodTemplateSpec, Toleration, Volume,
1313
},
1414
apimachinery::pkg::apis::meta::v1::{LabelSelector, LabelSelectorRequirement, ObjectMeta},
1515
};
@@ -31,6 +31,7 @@ pub struct PodBuilder {
3131
tolerations: Option<Vec<Toleration>>,
3232
volumes: Option<Vec<Volume>>,
3333
service_account_name: Option<String>,
34+
image_pull_secrets: Option<Vec<LocalObjectReference>>,
3435
}
3536

3637
impl PodBuilder {
@@ -145,6 +146,16 @@ impl PodBuilder {
145146
self
146147
}
147148

149+
pub fn image_pull_secrets(
150+
&mut self,
151+
secrets: impl IntoIterator<Item = String> + Iterator<Item = String>,
152+
) -> &mut Self {
153+
self.image_pull_secrets
154+
.get_or_insert_with(Vec::new)
155+
.extend(secrets.map(|s| LocalObjectReference { name: Some(s) }));
156+
self
157+
}
158+
148159
/// Hack because [`Pod`] predates [`LabelSelector`], and so its functionality is split between [`PodSpec::node_selector`] and [`Affinity::node_affinity`]
149160
fn node_selector_for_label_selector(
150161
label_selector: Option<LabelSelector>,
@@ -215,6 +226,7 @@ impl PodBuilder {
215226
// such as https://github.com/stackabletech/spark-operator/pull/256.
216227
enable_service_links: Some(false),
217228
service_account_name: self.service_account_name.clone(),
229+
image_pull_secrets: self.image_pull_secrets.clone(),
218230
..PodSpec::default()
219231
}
220232
}
@@ -246,15 +258,14 @@ impl PodBuilder {
246258

247259
#[cfg(test)]
248260
mod tests {
249-
use k8s_openapi::{
250-
api::core::v1::{PodAffinity, PodAffinityTerm},
251-
apimachinery::pkg::apis::meta::v1::{LabelSelector, LabelSelectorRequirement},
252-
};
253-
254261
use crate::builder::{
255262
meta::ObjectMetaBuilder,
256263
pod::{container::ContainerBuilder, volume::VolumeBuilder, PodBuilder},
257264
};
265+
use k8s_openapi::{
266+
api::core::v1::{LocalObjectReference, PodAffinity, PodAffinityTerm},
267+
apimachinery::pkg::apis::meta::v1::{LabelSelector, LabelSelectorRequirement},
268+
};
258269

259270
#[test]
260271
fn test_pod_builder() {
@@ -333,4 +344,25 @@ mod tests {
333344

334345
assert_eq!(pod.metadata.name.unwrap(), "foo");
335346
}
347+
348+
#[test]
349+
fn test_pod_builder_image_pull_secrets() {
350+
let container = ContainerBuilder::new("container")
351+
.image("private-comapany/product:2.4.14")
352+
.build();
353+
354+
let pod = PodBuilder::new()
355+
.metadata(ObjectMetaBuilder::new().name("testpod").build())
356+
.add_container(container)
357+
.image_pull_secrets(vec!["company-registry-secret".to_string()].into_iter())
358+
.build()
359+
.unwrap();
360+
361+
assert_eq!(
362+
pod.spec.unwrap().image_pull_secrets.unwrap(),
363+
vec![LocalObjectReference {
364+
name: Some("company-registry-secret".to_string())
365+
}]
366+
);
367+
}
336368
}

0 commit comments

Comments
 (0)