Github user vanzin commented on a diff in the pull request:
https://github.com/apache/spark/pull/19954#discussion_r157323182
--- Diff:
resource-managers/kubernetes/core/src/main/scala/org/apache/spark/deploy/k8s/submit/steps/DriverInitContainerBootstrapStep.scala
---
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.spark.deploy.k8s.submit.steps
+
+import java.io.StringWriter
+import java.util.Properties
+
+import io.fabric8.kubernetes.api.model.{ConfigMap, ConfigMapBuilder,
ContainerBuilder, HasMetadata}
+
+import org.apache.spark.deploy.k8s.Config._
+import org.apache.spark.deploy.k8s.submit.{InitContainerUtil,
KubernetesDriverSpec}
+import
org.apache.spark.deploy.k8s.submit.steps.initcontainer.{InitContainerConfigurationStep,
InitContainerSpec}
+
+/**
+ * Configures the init-container that bootstraps dependencies into the
driver pod, including
+ * building a ConfigMap that will be mounted into the init-container. The
ConfigMap carries
+ * configuration properties for the init-container.
+ */
+private[spark] class DriverInitContainerBootstrapStep(
+ initContainerConfigurationSteps: Seq[InitContainerConfigurationStep],
+ initContainerConfigMapName: String,
+ initContainerConfigMapKey: String)
+ extends DriverConfigurationStep {
+
+ override def configureDriver(driverSpec: KubernetesDriverSpec):
KubernetesDriverSpec = {
+ var currentInitContainerSpec = InitContainerSpec(
+ initContainerProperties = Map.empty[String, String],
+ driverSparkConf = Map.empty[String, String],
+ initContainer = new ContainerBuilder().build(),
+ driverContainer = driverSpec.driverContainer,
+ driverPod = driverSpec.driverPod,
+ initContainerDependentResources = Seq.empty[HasMetadata])
+ for (nextStep <- initContainerConfigurationSteps) {
+ currentInitContainerSpec =
nextStep.configureInitContainer(currentInitContainerSpec)
+ }
+
+ val configMap = buildConfigMap(
+ initContainerConfigMapName,
+ initContainerConfigMapKey,
+ currentInitContainerSpec.initContainerProperties)
+ val resolvedDriverSparkConf = driverSpec.driverSparkConf
+ .clone()
+ .set(INIT_CONTAINER_CONFIG_MAP_NAME, initContainerConfigMapName)
+ .set(INIT_CONTAINER_CONFIG_MAP_KEY_CONF, initContainerConfigMapKey)
+ .setAll(currentInitContainerSpec.driverSparkConf)
+ val resolvedDriverPod = InitContainerUtil.appendInitContainer(
+ currentInitContainerSpec.driverPod,
currentInitContainerSpec.initContainer)
+
+ driverSpec.copy(
+ driverPod = resolvedDriverPod,
+ driverContainer = currentInitContainerSpec.driverContainer,
+ driverSparkConf = resolvedDriverSparkConf,
+ otherKubernetesResources =
+ driverSpec.otherKubernetesResources ++
+ currentInitContainerSpec.initContainerDependentResources ++
+ Seq(configMap))
+ }
+
+ private def buildConfigMap(
+ configMapName: String,
+ configMapKey: String,
+ config: Map[String, String]): ConfigMap = {
+ val properties = new Properties()
+ config.foreach { entry =>
+ properties.setProperty(entry._1, entry._2) }
--- End diff --
`}` goes in next line, or you could have everything in one line.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]