@@ -114,8 +114,8 @@ func NewReconciler(
114114// +kubebuilder:rbac:groups=,resources=nodes,verbs=get
115115// +kubebuilder:rbac:groups=,resources=events,verbs=create;update;patch
116116// +kubebuilder:rbac:groups=,resources=resourcequotas,verbs=get;list;watch
117- // +kubebuilder:rbac:groups=extensions,resources=ingresses,verbs=get;list;watch;create;update;patch; delete
118- // +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch; delete
117+ // +kubebuilder:rbac:groups=extensions,resources=ingresses,verbs=get;list;watch;create;update;delete
118+ // +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;delete
119119// +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=get
120120// +kubebuilder:rbac:groups=sparkoperator.k8s.io,resources=sparkapplications,verbs=get;list;watch;create;update;patch;delete
121121// +kubebuilder:rbac:groups=sparkoperator.k8s.io,resources=sparkapplications/status,verbs=get;update;patch
@@ -297,9 +297,64 @@ func (r *Reconciler) reconcileSubmittedSparkApplication(ctx context.Context, req
297297 if err := r .updateSparkApplicationState (ctx , app ); err != nil {
298298 return err
299299 }
300+
301+ // Create web UI service for spark applications if enabled.
302+ if r .options .EnableUIService {
303+ service , err := r .createWebUIService (app )
304+ if err != nil {
305+ return fmt .Errorf ("failed to create web UI service: %v" , err )
306+ }
307+ app .Status .DriverInfo .WebUIServiceName = service .serviceName
308+ app .Status .DriverInfo .WebUIPort = service .servicePort
309+ app .Status .DriverInfo .WebUIAddress = fmt .Sprintf ("%s:%d" , service .serviceIP , app .Status .DriverInfo .WebUIPort )
310+
311+ // Create UI Ingress if ingress-format is set.
312+ if r .options .IngressURLFormat != "" {
313+ // We are going to want to use an ingress url.
314+ ingressURL , err := getDriverIngressURL (r .options .IngressURLFormat , app )
315+ if err != nil {
316+ return fmt .Errorf ("failed to get ingress url: %v" , err )
317+ }
318+ // need to ensure the spark.ui variables are configured correctly if a subPath is used.
319+ if ingressURL .Path != "" {
320+ if app .Spec .SparkConf == nil {
321+ app .Spec .SparkConf = make (map [string ]string )
322+ }
323+ app .Spec .SparkConf [common .SparkUIProxyBase ] = ingressURL .Path
324+ app .Spec .SparkConf [common .SparkUIProxyRedirectURI ] = "/"
325+ }
326+ ingress , err := r .createWebUIIngress (app , * service , ingressURL , r .options .IngressClassName )
327+ if err != nil {
328+ return fmt .Errorf ("failed to create web UI ingress: %v" , err )
329+ }
330+ app .Status .DriverInfo .WebUIIngressAddress = ingress .ingressURL .String ()
331+ app .Status .DriverInfo .WebUIIngressName = ingress .ingressName
332+ }
333+ }
334+
335+ for _ , driverIngressConfiguration := range app .Spec .DriverIngressOptions {
336+ service , err := r .createDriverIngressServiceFromConfiguration (app , & driverIngressConfiguration )
337+ if err != nil {
338+ return fmt .Errorf ("failed to create driver ingress service for SparkApplication: %v" , err )
339+ }
340+ // Create ingress if ingress-format is set.
341+ if driverIngressConfiguration .IngressURLFormat != "" {
342+ // We are going to want to use an ingress url.
343+ ingressURL , err := getDriverIngressURL (driverIngressConfiguration .IngressURLFormat , app )
344+ if err != nil {
345+ return fmt .Errorf ("failed to get driver ingress url: %v" , err )
346+ }
347+ _ , err = r .createDriverIngress (app , & driverIngressConfiguration , * service , ingressURL , r .options .IngressClassName )
348+ if err != nil {
349+ return fmt .Errorf ("failed to create driver ingress: %v" , err )
350+ }
351+ }
352+ }
353+
300354 if err := r .updateSparkApplicationStatus (ctx , app ); err != nil {
301355 return err
302356 }
357+
303358 return nil
304359 },
305360 )
@@ -687,63 +742,6 @@ func (r *Reconciler) submitSparkApplication(ctx context.Context, app *v1beta2.Sp
687742 }
688743 }
689744
690- // Create web UI service for spark applications if enabled.
691- if r .options .EnableUIService {
692- service , err := r .createWebUIService (app )
693- if err != nil {
694- return fmt .Errorf ("failed to create web UI service: %v" , err )
695- }
696- app .Status .DriverInfo .WebUIServiceName = service .serviceName
697- app .Status .DriverInfo .WebUIPort = service .servicePort
698- app .Status .DriverInfo .WebUIAddress = fmt .Sprintf ("%s:%d" , service .serviceIP , app .Status .DriverInfo .WebUIPort )
699- logger .Info ("Created web UI service for SparkApplication" , "name" , app .Name , "namespace" , app .Namespace )
700-
701- // Create UI Ingress if ingress-format is set.
702- if r .options .IngressURLFormat != "" {
703- // We are going to want to use an ingress url.
704- ingressURL , err := getDriverIngressURL (r .options .IngressURLFormat , app .Name , app .Namespace )
705- if err != nil {
706- return fmt .Errorf ("failed to get ingress url: %v" , err )
707- }
708- // need to ensure the spark.ui variables are configured correctly if a subPath is used.
709- if ingressURL .Path != "" {
710- if app .Spec .SparkConf == nil {
711- app .Spec .SparkConf = make (map [string ]string )
712- }
713- app .Spec .SparkConf [common .SparkUIProxyBase ] = ingressURL .Path
714- app .Spec .SparkConf [common .SparkUIProxyRedirectURI ] = "/"
715- }
716- ingress , err := r .createWebUIIngress (app , * service , ingressURL , r .options .IngressClassName )
717- if err != nil {
718- return fmt .Errorf ("failed to create web UI ingress: %v" , err )
719- }
720- app .Status .DriverInfo .WebUIIngressAddress = ingress .ingressURL .String ()
721- app .Status .DriverInfo .WebUIIngressName = ingress .ingressName
722- logger .Info ("Created web UI ingress for SparkApplication" , "name" , app .Name , "namespace" , app .Namespace )
723- }
724- }
725-
726- for _ , driverIngressConfiguration := range app .Spec .DriverIngressOptions {
727- logger .Info ("Creating driver ingress service for SparkApplication" , "name" , app .Name , "namespace" , app .Namespace )
728- service , err := r .createDriverIngressServiceFromConfiguration (app , & driverIngressConfiguration )
729- if err != nil {
730- return fmt .Errorf ("failed to create driver ingress service for SparkApplication: %v" , err )
731- }
732- // Create ingress if ingress-format is set.
733- if driverIngressConfiguration .IngressURLFormat != "" {
734- // We are going to want to use an ingress url.
735- ingressURL , err := getDriverIngressURL (driverIngressConfiguration .IngressURLFormat , app .Name , app .Namespace )
736- if err != nil {
737- return fmt .Errorf ("failed to get driver ingress url: %v" , err )
738- }
739- ingress , err := r .createDriverIngress (app , & driverIngressConfiguration , * service , ingressURL , r .options .IngressClassName )
740- if err != nil {
741- return fmt .Errorf ("failed to create driver ingress: %v" , err )
742- }
743- logger .V (1 ).Info ("Created driver ingress for SparkApplication" , "name" , app .Name , "namespace" , app .Namespace , "ingressName" , ingress .ingressName , "ingressURL" , ingress .ingressURL )
744- }
745- }
746-
747745 defer func () {
748746 if err := r .cleanUpPodTemplateFiles (app ); err != nil {
749747 logger .Error (fmt .Errorf ("failed to clean up pod template files: %v" , err ), "name" , app .Name , "namespace" , app .Namespace )
0 commit comments