@@ -134,7 +134,7 @@ def set_primary(self, account_id: str, namespace: str | None = None) -> str | No
134134
135135 return account_id
136136
137- def create (self , service_account : ServiceAccount ) -> str :
137+ def create (self , service_account : ServiceAccount , dry_run = False ) -> str :
138138 """Create a new service account and return ids associated id.
139139
140140 Args:
@@ -150,7 +150,7 @@ def create(self, service_account: ServiceAccount) -> str:
150150 secretname = self ._get_secret_name (username )
151151
152152 # Check if the resources to be created already exist in K8s cluster
153- if self .kube_interface .exists (
153+ if not dry_run and self .kube_interface .exists (
154154 resource_type = KubernetesResourceType .SERVICEACCOUNT ,
155155 resource_name = username ,
156156 namespace = namespace ,
@@ -160,7 +160,7 @@ def create(self, service_account: ServiceAccount) -> str:
160160 f"A { KubernetesResourceType .SERVICEACCOUNT } with name '{ username } ' already exists."
161161 )
162162
163- if self .kube_interface .exists (
163+ if not dry_run and self .kube_interface .exists (
164164 resource_type = KubernetesResourceType .ROLE ,
165165 resource_name = rolename ,
166166 namespace = namespace ,
@@ -170,7 +170,7 @@ def create(self, service_account: ServiceAccount) -> str:
170170 f"A { KubernetesResourceType .ROLE } with name '{ rolename } ' already exists."
171171 )
172172
173- if self .kube_interface .exists (
173+ if not dry_run and self .kube_interface .exists (
174174 resource_type = KubernetesResourceType .ROLEBINDING ,
175175 resource_name = rolebindingname ,
176176 namespace = namespace ,
@@ -180,57 +180,64 @@ def create(self, service_account: ServiceAccount) -> str:
180180 f"A { KubernetesResourceType .ROLEBINDING } with name '{ rolebindingname } ' already exists."
181181 )
182182
183- self .kube_interface .create (
183+ sa_manifest = self .kube_interface .create (
184184 resource_type = KubernetesResourceType .SERVICEACCOUNT ,
185185 resource_name = username ,
186186 namespace = namespace ,
187+ dry_run = dry_run ,
187188 ** {"username" : username },
188189 )
189- self .kube_interface .create (
190+ role_manifest = self .kube_interface .create (
190191 resource_type = KubernetesResourceType .ROLE ,
191192 resource_name = rolename ,
192193 namespace = namespace ,
194+ dry_run = dry_run ,
193195 ** {"username" : username },
194196 )
195- self .kube_interface .create (
197+ role_binding_manifest = self .kube_interface .create (
196198 resource_type = KubernetesResourceType .ROLEBINDING ,
197199 resource_name = rolebindingname ,
198200 namespace = namespace ,
199201 role = rolename ,
202+ dry_run = dry_run ,
200203 serviceaccount = account_id ,
201204 username = username ,
202205 )
203- self .kube_interface .create (
206+ secret_manifest = self .kube_interface .create (
204207 resource_type = KubernetesResourceType .SECRET_GENERIC ,
205208 resource_name = secretname ,
206209 namespace = namespace ,
210+ dry_run = dry_run ,
207211 )
208- self .kube_interface .set_label (
209- resource_type = KubernetesResourceType .SERVICEACCOUNT ,
210- resource_name = username ,
211- label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
212- namespace = namespace ,
213- )
214- self .kube_interface .set_label (
215- resource_type = KubernetesResourceType .ROLE ,
216- resource_name = rolename ,
217- label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
218- namespace = namespace ,
219- )
220- self .kube_interface .set_label (
221- resource_type = KubernetesResourceType .ROLEBINDING ,
222- resource_name = rolebindingname ,
223- label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
224- namespace = namespace ,
225- )
226- if service_account .primary is True :
227- self .set_primary (account_id = account_id , namespace = namespace )
228-
229- if len (service_account .extra_confs ) > 0 :
230- self .set_configurations (
231- account_id = account_id , configurations = configurations
212+ if not dry_run :
213+ self .kube_interface .set_label (
214+ resource_type = KubernetesResourceType .SERVICEACCOUNT ,
215+ resource_name = username ,
216+ label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
217+ namespace = namespace ,
232218 )
233- return account_id
219+ self .kube_interface .set_label (
220+ resource_type = KubernetesResourceType .ROLE ,
221+ resource_name = rolename ,
222+ label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
223+ namespace = namespace ,
224+ )
225+ self .kube_interface .set_label (
226+ resource_type = KubernetesResourceType .ROLEBINDING ,
227+ resource_name = rolebindingname ,
228+ label = f"{ MANAGED_BY_LABELNAME } ={ SPARK8S_LABEL } " ,
229+ namespace = namespace ,
230+ )
231+ if service_account .primary is True :
232+ self .set_primary (account_id = account_id , namespace = namespace )
233+
234+ if len (service_account .extra_confs ) > 0 :
235+ self .set_configurations (
236+ account_id = account_id , configurations = configurations
237+ )
238+
239+ manifests = [sa_manifest , role_manifest , role_binding_manifest , secret_manifest ]
240+ return "---\n " .join (manifests )
234241
235242 def _create_account_secret (self , service_account : ServiceAccount ):
236243 """Create the secret that will contain the user configurations."""
0 commit comments