Skip to content

Commit b7bec6b

Browse files
committed
Fix Spark driver not getting imagePullPolicy set
Reported in https://stackable-workspace.slack.com/archives/C037Q9DPF4P/p1682326403038869
1 parent 718e462 commit b7bec6b

File tree

3 files changed

+26
-29
lines changed

3 files changed

+26
-29
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ All notable changes to this project will be documented in this file.
1818

1919
### Fixed
2020

21-
- Fix quoting issues when spark config values contain spaces ([#243])
21+
- Fix quoting issues when spark config values contain spaces ([#243]).
22+
- Fix Spark driver not getting imagePullPolicy set ([#243]).
2223

2324
[#235]: https://github.com/stackabletech/spark-k8s-operator/pull/235
2425
[#236]: https://github.com/stackabletech/spark-k8s-operator/pull/236

rust/crd/src/lib.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,10 @@ pub struct SparkApplicationSpec {
171171
pub image: Option<String>,
172172
#[serde(default, skip_serializing_if = "Option::is_none")]
173173
pub spark_image: Option<String>,
174-
#[serde(default, skip_serializing_if = "Option::is_none")]
175-
pub spark_image_pull_policy: Option<ImagePullPolicy>,
176-
#[serde(default, skip_serializing_if = "Option::is_none")]
177-
pub spark_image_pull_secrets: Option<Vec<LocalObjectReference>>,
174+
#[serde(default)]
175+
pub spark_image_pull_policy: ImagePullPolicy,
176+
#[serde(default)]
177+
pub spark_image_pull_secrets: Vec<LocalObjectReference>,
178178
/// Name of the Vector aggregator discovery ConfigMap.
179179
/// It must contain the key `ADDRESS` with the address of the Vector aggregator.
180180
#[serde(skip_serializing_if = "Option::is_none")]
@@ -205,9 +205,12 @@ pub struct SparkApplicationSpec {
205205
pub log_file_directory: Option<LogFileDirectorySpec>,
206206
}
207207

208-
#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize, Display, EnumString)]
208+
#[derive(
209+
Clone, Debug, Default, Deserialize, Eq, JsonSchema, PartialEq, Serialize, Display, EnumString,
210+
)]
209211
pub enum ImagePullPolicy {
210212
Always,
213+
#[default]
211214
IfNotPresent,
212215
Never,
213216
}
@@ -250,11 +253,11 @@ impl SparkApplication {
250253
self.spec.image.as_deref()
251254
}
252255

253-
pub fn spark_image_pull_policy(&self) -> Option<ImagePullPolicy> {
256+
pub fn spark_image_pull_policy(&self) -> ImagePullPolicy {
254257
self.spec.spark_image_pull_policy.clone()
255258
}
256259

257-
pub fn spark_image_pull_secrets(&self) -> Option<Vec<LocalObjectReference>> {
260+
pub fn spark_image_pull_secrets(&self) -> Vec<LocalObjectReference> {
258261
self.spec.spark_image_pull_secrets.clone()
259262
}
260263

@@ -466,6 +469,7 @@ impl SparkApplication {
466469
format!("--conf spark.kubernetes.executor.podTemplateContainerName={container_name}", container_name = SparkContainer::Spark),
467470
format!("--conf spark.kubernetes.namespace={}", self.metadata.namespace.as_ref().context(NoNamespaceSnafu)?),
468471
format!("--conf spark.kubernetes.driver.container.image={}", self.spec.spark_image.as_ref().context(NoSparkImageSnafu)?),
472+
format!("--conf spark.kubernetes.container.image.pullPolicy={}", self.spark_image_pull_policy()),
469473
format!("--conf spark.kubernetes.executor.container.image={}", self.spec.spark_image.as_ref().context(NoSparkImageSnafu)?),
470474
format!("--conf spark.kubernetes.authenticate.driver.serviceAccountName={}", serviceaccount_name),
471475
format!("--conf spark.driver.defaultJavaOptions=-Dlog4j.configurationFile={VOLUME_MOUNT_PATH_LOG_CONFIG}/{LOG4J2_CONFIG_FILE}"),
@@ -1129,13 +1133,13 @@ spec:
11291133
.unwrap();
11301134

11311135
assert_eq!(
1132-
Some(vec![LocalObjectReference {
1136+
vec![LocalObjectReference {
11331137
name: Some("myregistrykey".to_string())
1134-
}]),
1138+
}],
11351139
spark_application.spark_image_pull_secrets()
11361140
);
11371141
assert_eq!(
1138-
Some(ImagePullPolicy::Always),
1142+
ImagePullPolicy::Always,
11391143
spark_application.spark_image_pull_policy()
11401144
);
11411145
}

rust/operator-binary/src/spark_k8s_controller.rs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,7 @@ fn init_containers(
365365
.args(vec![args.join(" && ")])
366366
.add_volume_mount(VOLUME_MOUNT_NAME_REQ, VOLUME_MOUNT_PATH_REQ)
367367
.add_volume_mount(VOLUME_MOUNT_NAME_LOG, VOLUME_MOUNT_PATH_LOG);
368-
if let Some(image_pull_policy) = spark_application.spark_image_pull_policy() {
369-
rcb.image_pull_policy(image_pull_policy.to_string());
370-
}
368+
rcb.image_pull_policy(spark_application.spark_image_pull_policy().to_string());
371369
rcb.build()
372370
});
373371

@@ -402,10 +400,7 @@ fn pod_template(
402400
.join("; "),
403401
);
404402
}
405-
406-
if let Some(image_pull_policy) = spark_application.spark_image_pull_policy() {
407-
cb.image_pull_policy(image_pull_policy.to_string());
408-
}
403+
cb.image_pull_policy(spark_application.spark_image_pull_policy().to_string());
409404

410405
let mut pb = PodBuilder::new();
411406
pb.metadata(
@@ -430,13 +425,12 @@ fn pod_template(
430425
pb.add_init_container(init_container.clone());
431426
}
432427

433-
if let Some(image_pull_secrets) = spark_application.spark_image_pull_secrets() {
434-
pb.image_pull_secrets(
435-
image_pull_secrets
436-
.iter()
437-
.flat_map(|secret| secret.name.clone()),
438-
);
439-
}
428+
pb.image_pull_secrets(
429+
spark_application
430+
.spark_image_pull_secrets()
431+
.iter()
432+
.flat_map(|secret| secret.name.clone()),
433+
);
440434

441435
if config.logging.enable_vector_agent {
442436
pb.add_container(vector_container(
@@ -620,9 +614,7 @@ fn spark_job(
620614
// TODO: move this to the image
621615
.add_env_var("SPARK_CONF_DIR", "/stackable/spark/conf");
622616

623-
if let Some(image_pull_policy) = spark_application.spark_image_pull_policy() {
624-
cb.image_pull_policy(image_pull_policy.to_string());
625-
}
617+
cb.image_pull_policy(spark_application.spark_image_pull_policy().to_string());
626618

627619
let mut volumes = vec![
628620
VolumeBuilder::new(VOLUME_MOUNT_NAME_CONFIG)
@@ -679,7 +671,7 @@ fn spark_job(
679671
restart_policy: Some("Never".to_string()),
680672
service_account_name: serviceaccount.metadata.name.clone(),
681673
volumes: Some(volumes),
682-
image_pull_secrets: spark_application.spark_image_pull_secrets(),
674+
image_pull_secrets: Some(spark_application.spark_image_pull_secrets()),
683675
security_context: Some(security_context()),
684676
..PodSpec::default()
685677
}),

0 commit comments

Comments
 (0)