9
9
from testsuite .kubernetes .client import KubernetesClient
10
10
from testsuite .kubernetes import KubernetesObject , modify
11
11
from testsuite .kuadrant .policy import Policy
12
- from testsuite .utils import check_condition , asdict
12
+ from testsuite .utils import check_condition , asdict , domain_match
13
13
14
14
15
15
class KuadrantGateway (KubernetesObject , Gateway ):
@@ -84,11 +84,15 @@ def is_affected_by(self, policy: Policy) -> bool:
84
84
return True
85
85
return False
86
86
87
- def get_tls_cert (self ):
88
- if "tls" not in self .model .spec .listeners [0 ]:
87
+ def get_tls_cert (self , hostname ):
88
+ tls_cert_secret_name = None
89
+ for listener in self .all_tls_listeners ():
90
+ if domain_match (hostname , listener .hostname ):
91
+ tls_cert_secret_name = listener .tls .certificateRefs [0 ].name
92
+
93
+ if tls_cert_secret_name is None :
89
94
return None
90
95
91
- tls_cert_secret_name = self .cert_secret_name
92
96
try :
93
97
tls_cert_secret = self .cluster .get_secret (tls_cert_secret_name )
94
98
except oc .OpenShiftPythonException as e :
@@ -102,20 +106,24 @@ def get_tls_cert(self):
102
106
)
103
107
return tls_cert
104
108
109
+ def all_tls_listeners (self ):
110
+ """Yields all listeners in gateway that support 'tls'"""
111
+ for listener in self .model .spec .listeners :
112
+ if "tls" in listener :
113
+ yield listener
114
+
105
115
def delete (self , ignore_not_found = True , cmd_args = None ):
106
116
res = super ().delete (ignore_not_found , cmd_args )
107
117
with self .cluster .context :
108
118
# TLSPolicy does not delete certificates it creates
109
- oc .selector (f"secret/{ self .cert_secret_name } " ).delete (ignore_not_found = True )
119
+ for secret in oc .selector ("secret" ).objects ():
120
+ if "tls" in secret .name () and self .name () in secret .name ():
121
+ secret .delete ()
122
+
110
123
# Istio does not delete ServiceAccount
111
124
oc .selector (f"sa/{ self .service_name } " ).delete (ignore_not_found = True )
112
125
return res
113
126
114
- @property
115
- def cert_secret_name (self ):
116
- """Returns name of the secret with generated TLS certificate"""
117
- return self .model .spec .listeners [0 ].tls .certificateRefs [0 ].name
118
-
119
127
@property
120
128
def reference (self ):
121
129
return {
0 commit comments