@@ -389,14 +389,13 @@ async def _on_openstackcluster_event_impl(
389
389
390
390
# Get the cloud credential from the cluster and use it to delete dangling
391
391
# resources created by OpenStack integrations on the cluster
392
- secrets = await ekclient .api ("v1" ).resource ("secrets" )
393
- try :
394
- clouds_secret = await secrets .fetch (
395
- spec ["identityRef" ]["name" ], namespace = namespace
396
- )
397
- except easykube .ApiError as exc :
398
- if exc .status_code != 404 :
399
- raise
392
+ clouds_secret = await _get_clouds_secret (
393
+ spec ["identityRef" ]["name" ], namespace = namespace
394
+ )
395
+ if clouds_secret is None :
396
+ # TODO(johngarbutt): fail better when secret not found?
397
+ logger .error (f"clouds.yaml not found for: { clustername } " )
398
+
400
399
else :
401
400
clouds = yaml .safe_load (base64 .b64decode (clouds_secret .data ["clouds.yaml" ]))
402
401
if "cacert" in clouds_secret .data :
@@ -424,6 +423,7 @@ async def _on_openstackcluster_event_impl(
424
423
CREDENTIAL_ANNOTATION
425
424
)
426
425
remove_appcred = credential_annotation_value == CREDENTIAL_ANNOTATION_DELETE
426
+
427
427
await purge_openstack_resources (
428
428
logger ,
429
429
clouds ,
@@ -436,7 +436,7 @@ async def _on_openstackcluster_event_impl(
436
436
# If we get to here, OpenStack resources have been successfully deleted
437
437
# So we can remove the appcred secret if we are the last actor
438
438
if remove_appcred and len (finalizers ) == 1 :
439
- await secrets . delete (clouds_secret .metadata . name , namespace = namespace )
439
+ await _delete_secret (clouds_secret .metadata [ " name" ], namespace )
440
440
logger .info ("cloud credential secret deleted" )
441
441
elif remove_appcred :
442
442
# If the annotation says delete but other controllers are still acting, go round again
@@ -451,7 +451,22 @@ async def _on_openstackcluster_event_impl(
451
451
logger .info ("removed janitor finalizer from cluster" )
452
452
453
453
454
+ async def _delete_secret (name , namespace ):
455
+ secrets = await ekclient .api ("v1" ).resource ("secrets" )
456
+ await secrets .delete (name , namespace = namespace )
457
+
458
+
454
459
async def _get_os_cluster_client ():
455
460
capoapi = await ekclient .api_preferred_version (CAPO_API_GROUP )
456
461
openstackclusters = await capoapi .resource ("openstackclusters" )
457
462
return openstackclusters
463
+
464
+
465
+ async def _get_clouds_secret (secret_name , namespace ):
466
+ secrets = await ekclient .api ("v1" ).resource ("secrets" )
467
+ try :
468
+ return await secrets .fetch (secret_name , namespace = namespace )
469
+ except easykube .ApiError as exc :
470
+ if exc .status_code != 404 :
471
+ raise
472
+ # TODO(johngarbutt): fail better when not found?
0 commit comments