@@ -107,8 +107,27 @@ install_adapter_instance() {
107107 log_info " Resource type: ${resource_type} "
108108 log_info " Adapter name: ${adapter_name} "
109109
110- # Construct release name
111- local release_name=" adapter-${resource_type} -${adapter_name} "
110+ # Generate random suffix to prevent namespace conflicts
111+ local random_suffix
112+ random_suffix=$( head /dev/urandom | LC_ALL=C tr -dc ' a-z0-9' | head -c 8)
113+
114+ # Construct release name with random suffix
115+ # Kubernetes resource names have a 63-character limit
116+ # Reserve ~15 characters for Helm's deployment/pod suffixes
117+ local max_release_name_length=48
118+ local base_without_suffix=" adapter-${resource_type} -${adapter_name} "
119+
120+ # Calculate max base length (reserve space for "-" + suffix)
121+ local max_base_length=$(( max_release_name_length - ${# random_suffix} - 1 ))
122+
123+ # Truncate base if necessary, but always keep the suffix
124+ if [[ ${# base_without_suffix} -gt ${max_base_length} ]]; then
125+ base_without_suffix=" ${base_without_suffix: 0: ${max_base_length} } "
126+ log_warning " Release name base truncated to ${max_base_length} chars to stay within Kubernetes limits"
127+ fi
128+
129+ local release_name=" ${base_without_suffix} -${random_suffix} "
130+ log_info " Release name (with random suffix): ${release_name} (length: ${# release_name} )"
112131
113132 # Source adapter config directory (using ADAPTERS_FILE_DIR env var)
114133 local adapter_configs_dir=" ${ADAPTERS_FILE_DIR:- ${TESTDATA_DIR} / adapter-configs} "
@@ -165,7 +184,7 @@ install_adapter_instance() {
165184 fi
166185
167186
168- # Build helm command
187+ # Build helm command with labels to track adapter metadata
169188 local helm_cmd=(
170189 helm upgrade --install
171190 " ${release_name} "
@@ -185,6 +204,7 @@ install_adapter_instance() {
185204 --set " broker.googlepubsub.subscriptionId=${subscription_id} "
186205 --set " broker.googlepubsub.topic=${topic} "
187206 --set " broker.googlepubsub.deadLetterTopic=${dead_letter_topic} "
207+ --labels " adapter-resource-type=${resource_type} ,adapter-name=${adapter_name} "
188208 )
189209
190210 log_info " Executing Helm command:"
@@ -200,12 +220,36 @@ install_adapter_instance() {
200220 log_success " Adapter ${adapter_name} for ${resource_type} is running and healthy"
201221 else
202222 log_error " Adapter ${adapter_name} for ${resource_type} deployment failed health check"
203- log_info " Checking pod logs for troubleshooting:"
204- kubectl logs -n " ${NAMESPACE} " -l " app.kubernetes.io/instance=${release_name} " --tail=50 2> /dev/null || true
223+
224+ # Capture debug logs before cleanup
225+ local debug_log_dir=" ${DEBUG_LOG_DIR:- ${WORK_DIR} / debug-logs} "
226+ capture_debug_logs " ${NAMESPACE} " " app.kubernetes.io/instance=${release_name} " " ${release_name} " " ${debug_log_dir} "
227+
228+ # Cleanup failed deployment
229+ log_warning " Cleaning up failed adapter deployment: ${release_name} "
230+ if helm uninstall " ${release_name} " -n " ${NAMESPACE} " --wait --timeout 5m 2> /dev/null; then
231+ log_info " Failed adapter deployment cleaned up successfully"
232+ else
233+ log_warning " Failed to cleanup adapter deployment, it may need manual cleanup"
234+ fi
205235 return 1
206236 fi
207237 else
208238 log_error " Failed to install adapter ${adapter_name} for ${resource_type} "
239+
240+ # Check if release was created (partial deployment) and cleanup
241+ if helm list -n " ${NAMESPACE} " 2> /dev/null | grep -q " ^${release_name} " ; then
242+ # Capture debug logs before cleanup
243+ local debug_log_dir=" ${DEBUG_LOG_DIR:- ${WORK_DIR} / debug-logs} "
244+ capture_debug_logs " ${NAMESPACE} " " app.kubernetes.io/instance=${release_name} " " ${release_name} " " ${debug_log_dir} "
245+
246+ log_warning " Cleaning up failed adapter deployment: ${release_name} "
247+ if helm uninstall " ${release_name} " -n " ${NAMESPACE} " --wait --timeout 5m 2> /dev/null; then
248+ log_info " Failed adapter deployment cleaned up successfully"
249+ else
250+ log_warning " Failed to cleanup adapter deployment, it may need manual cleanup"
251+ fi
252+ fi
209253 return 1
210254 fi
211255}
@@ -259,29 +303,38 @@ uninstall_adapter_instance() {
259303 log_info " Resource type: ${resource_type} "
260304 log_info " Adapter name: ${adapter_name} "
261305
262- # Construct release name
263- local release_name=" adapter-${resource_type} -${adapter_name} "
306+ # Find all releases by searching for Helm labels (avoids pattern matching issues with truncated names)
307+ log_info " Searching for releases with labels: adapter-resource-type=${resource_type} , adapter-name=${adapter_name} "
308+ local matching_releases
309+ matching_releases=$( helm list -n " ${NAMESPACE} " --selector " adapter-resource-type=${resource_type} ,adapter-name=${adapter_name} " -q 2> /dev/null)
264310
265- # Check if release exists
266- if ! helm list -n " ${NAMESPACE} " 2> /dev/null | grep -q " ^${release_name} " ; then
267- log_warning " Release '${release_name} ' not found in namespace '${NAMESPACE} '"
311+ if [[ -z " ${matching_releases} " ]]; then
312+ log_warning " No releases found with labels adapter-resource-type=${resource_type} , adapter-name=${adapter_name} in namespace '${NAMESPACE} '"
268313 return 0
269314 fi
270315
271- if [[ " ${DRY_RUN} " == " true" ]]; then
272- log_info " [DRY-RUN] Would uninstall adapter (release: ${release_name} )"
273- return 0
274- fi
316+ # Uninstall all matching releases
317+ local uninstall_errors=0
318+ while IFS= read -r release_name; do
319+ if [[ " ${DRY_RUN} " == " true" ]]; then
320+ log_info " [DRY-RUN] Would uninstall adapter (release: ${release_name} )"
321+ else
322+ log_info " Uninstalling adapter ${adapter_name} for ${resource_type} (release: ${release_name} )..."
323+ log_info " Executing: helm uninstall ${release_name} -n ${NAMESPACE} --wait --timeout 5m"
275324
276- log_info " Uninstalling adapter ${adapter_name} for ${resource_type} ..."
277- log_info " Executing: helm uninstall ${release_name} -n ${NAMESPACE} --wait --timeout 5m"
325+ if helm uninstall " ${release_name} " -n " ${NAMESPACE} " --wait --timeout 5m; then
326+ log_success " Adapter ${adapter_name} for ${resource_type} (release: ${release_name} ) uninstalled successfully"
327+ else
328+ log_error " Failed to uninstall adapter ${adapter_name} for ${resource_type} (release: ${release_name} )"
329+ (( uninstall_errors++ ))
330+ fi
331+ fi
332+ done <<< " ${matching_releases}"
278333
279- if helm uninstall " ${release_name} " -n " ${NAMESPACE} " --wait --timeout 5m; then
280- log_success " Adapter ${adapter_name} for ${resource_type} uninstalled successfully"
281- else
282- log_error " Failed to uninstall adapter ${adapter_name} for ${resource_type} "
334+ if [[ ${uninstall_errors} -gt 0 ]]; then
283335 return 1
284336 fi
337+ return 0
285338}
286339
287340uninstall_adapters () {
0 commit comments