@@ -24,13 +24,13 @@ use stackable_operator::{
24
24
commons:: {
25
25
listener:: { Listener , ListenerPort } ,
26
26
product_image_selection:: ResolvedProductImage ,
27
+ rbac:: build_rbac_resources,
27
28
} ,
28
29
k8s_openapi:: {
29
30
DeepMerge ,
30
31
api:: {
31
32
apps:: v1:: { StatefulSet , StatefulSetSpec } ,
32
33
core:: v1:: { ConfigMap , PodSecurityContext , ServiceAccount } ,
33
- rbac:: v1:: { ClusterRole , RoleBinding , RoleRef , Subject } ,
34
34
} ,
35
35
apimachinery:: pkg:: apis:: meta:: v1:: LabelSelector ,
36
36
} ,
@@ -60,10 +60,10 @@ use crate::{
60
60
ACCESS_KEY_ID , APP_NAME , HISTORY_CONTROLLER_NAME , HISTORY_ROLE_NAME , HISTORY_UI_PORT ,
61
61
JVM_SECURITY_PROPERTIES_FILE , LISTENER_VOLUME_DIR , LISTENER_VOLUME_NAME ,
62
62
MAX_SPARK_LOG_FILES_SIZE , METRICS_PORT , OPERATOR_NAME , SECRET_ACCESS_KEY ,
63
- SPARK_CLUSTER_ROLE , SPARK_DEFAULTS_FILE_NAME , SPARK_ENV_SH_FILE_NAME ,
64
- SPARK_IMAGE_BASE_NAME , SPARK_UID , STACKABLE_TRUST_STORE , VOLUME_MOUNT_NAME_CONFIG ,
65
- VOLUME_MOUNT_NAME_LOG , VOLUME_MOUNT_NAME_LOG_CONFIG , VOLUME_MOUNT_PATH_CONFIG ,
66
- VOLUME_MOUNT_PATH_LOG , VOLUME_MOUNT_PATH_LOG_CONFIG ,
63
+ SPARK_DEFAULTS_FILE_NAME , SPARK_ENV_SH_FILE_NAME , SPARK_IMAGE_BASE_NAME , SPARK_UID ,
64
+ STACKABLE_TRUST_STORE , VOLUME_MOUNT_NAME_CONFIG , VOLUME_MOUNT_NAME_LOG ,
65
+ VOLUME_MOUNT_NAME_LOG_CONFIG , VOLUME_MOUNT_PATH_CONFIG , VOLUME_MOUNT_PATH_LOG ,
66
+ VOLUME_MOUNT_PATH_LOG_CONFIG ,
67
67
} ,
68
68
history:: { self , HistoryConfig , SparkHistoryServerContainer , v1alpha1} ,
69
69
listener,
@@ -78,9 +78,9 @@ use crate::{
78
78
#[ strum_discriminants( derive( IntoStaticStr ) ) ]
79
79
#[ allow( clippy:: enum_variant_names) ]
80
80
pub enum Error {
81
- #[ snafu( display( "failed to build object meta data " ) ) ]
82
- ObjectMeta {
83
- source : stackable_operator:: builder :: meta :: Error ,
81
+ #[ snafu( display( "failed to build RBAC resources " ) ) ]
82
+ BuildRbacResources {
83
+ source : stackable_operator:: commons :: rbac :: Error ,
84
84
} ,
85
85
86
86
#[ snafu( display( "failed to build spark history group listener" ) ) ]
@@ -113,8 +113,8 @@ pub enum Error {
113
113
source : stackable_operator:: builder:: meta:: Error ,
114
114
} ,
115
115
116
- #[ snafu( display( "failed to update the history server deployment " ) ) ]
117
- ApplyDeployment {
116
+ #[ snafu( display( "failed to update the history server stateful set " ) ) ]
117
+ ApplyStatefulSet {
118
118
source : stackable_operator:: cluster_resources:: Error ,
119
119
} ,
120
120
@@ -123,11 +123,6 @@ pub enum Error {
123
123
source : stackable_operator:: cluster_resources:: Error ,
124
124
} ,
125
125
126
- #[ snafu( display( "failed to update history server service" ) ) ]
127
- ApplyService {
128
- source : stackable_operator:: cluster_resources:: Error ,
129
- } ,
130
-
131
126
#[ snafu( display( "failed to apply role ServiceAccount" ) ) ]
132
127
ApplyServiceAccount {
133
128
source : stackable_operator:: cluster_resources:: Error ,
@@ -275,14 +270,20 @@ pub async fn reconcile(
275
270
. context ( LogDirSnafu ) ?;
276
271
277
272
// Use a dedicated service account for history server pods.
278
- let ( serviceaccount, rolebinding) =
279
- build_history_role_serviceaccount ( shs, & resolved_product_image. app_version_label ) ?;
280
- let serviceaccount = cluster_resources
281
- . add ( client, serviceaccount)
273
+ let ( service_account, role_binding) = build_rbac_resources (
274
+ shs,
275
+ APP_NAME ,
276
+ cluster_resources
277
+ . get_required_labels ( )
278
+ . context ( GetRequiredLabelsSnafu ) ?,
279
+ )
280
+ . context ( BuildRbacResourcesSnafu ) ?;
281
+ let service_account = cluster_resources
282
+ . add ( client, service_account)
282
283
. await
283
284
. context ( ApplyServiceAccountSnafu ) ?;
284
285
cluster_resources
285
- . add ( client, rolebinding )
286
+ . add ( client, role_binding )
286
287
. await
287
288
. context ( ApplyRoleBindingSnafu ) ?;
288
289
@@ -322,12 +323,12 @@ pub async fn reconcile(
322
323
& rgr,
323
324
& log_dir,
324
325
& merged_config,
325
- & serviceaccount ,
326
+ & service_account ,
326
327
) ?;
327
328
cluster_resources
328
329
. add ( client, sts)
329
330
. await
330
- . context ( ApplyDeploymentSnafu ) ?;
331
+ . context ( ApplyStatefulSetSnafu ) ?;
331
332
332
333
let rg_group_listener = build_group_listener (
333
334
shs,
@@ -674,49 +675,6 @@ fn build_stateful_set(
674
675
} )
675
676
}
676
677
677
- // TODO: This function should be replaced with operator-rs build_rbac_resources.
678
- // See: https://github.com/stackabletech/spark-k8s-operator/issues/499
679
- #[ allow( clippy:: result_large_err) ]
680
- fn build_history_role_serviceaccount (
681
- shs : & v1alpha1:: SparkHistoryServer ,
682
- app_version_label : & str ,
683
- ) -> Result < ( ServiceAccount , RoleBinding ) , Error > {
684
- let sa = ServiceAccount {
685
- metadata : ObjectMetaBuilder :: new ( )
686
- . name_and_namespace ( shs)
687
- . ownerreference_from_resource ( shs, None , Some ( true ) )
688
- . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
689
- . with_recommended_labels ( labels ( shs, app_version_label, HISTORY_CONTROLLER_NAME ) )
690
- . context ( MetadataBuildSnafu ) ?
691
- . build ( ) ,
692
- ..ServiceAccount :: default ( )
693
- } ;
694
- let binding = RoleBinding {
695
- metadata : ObjectMetaBuilder :: new ( )
696
- . name_and_namespace ( shs)
697
- . ownerreference_from_resource ( shs, None , Some ( true ) )
698
- . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
699
- . with_recommended_labels ( labels ( shs, app_version_label, HISTORY_CONTROLLER_NAME ) )
700
- . context ( MetadataBuildSnafu ) ?
701
- . build ( ) ,
702
- role_ref : RoleRef {
703
- api_group : <ClusterRole as stackable_operator:: k8s_openapi:: Resource >:: GROUP // need to fully qualify because of "Resource" name clash
704
- . to_string ( ) ,
705
- kind : <ClusterRole as stackable_operator:: k8s_openapi:: Resource >:: KIND . to_string ( ) ,
706
- name : SPARK_CLUSTER_ROLE . to_string ( ) ,
707
- } ,
708
- subjects : Some ( vec ! [ Subject {
709
- api_group: Some (
710
- <ServiceAccount as stackable_operator:: k8s_openapi:: Resource >:: GROUP . to_string( ) ,
711
- ) ,
712
- kind: <ServiceAccount as stackable_operator:: k8s_openapi:: Resource >:: KIND . to_string( ) ,
713
- name: sa. name_any( ) ,
714
- namespace: sa. namespace( ) ,
715
- } ] ) ,
716
- } ;
717
- Ok ( ( sa, binding) )
718
- }
719
-
720
678
#[ allow( clippy:: result_large_err) ]
721
679
fn spark_defaults (
722
680
shs : & v1alpha1:: SparkHistoryServer ,
0 commit comments