Skip to content

Commit ed77493

Browse files
committed
fix: catch and display unknownhost exception (#757)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 1e9d24a commit ed77493

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/client/ClientAdapter.kt

+9-1
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,22 @@ abstract class ClientAdapter<C : KubernetesClient>(private val fabric8Client: C)
8181
setSslContext(builder, config, externalTrustManagerProvider)
8282
}
8383
.build()
84-
return if (ClusterHelper.isOpenShift(kubeClient)) {
84+
return if (isOpenShift(kubeClient)) {
8585
val osClient = kubeClient.adapt(NamespacedOpenShiftClient::class.java)
8686
OSClientAdapter(osClient, kubeClient)
8787
} else {
8888
KubeClientAdapter(kubeClient)
8989
}
9090
}
9191

92+
private fun isOpenShift(client: KubernetesClient): Boolean {
93+
return try {
94+
ClusterHelper.isOpenShift(client)
95+
} catch (e: Exception) {
96+
false;
97+
}
98+
}
99+
92100
private fun setSslContext(
93101
builder: HttpClient.Builder,
94102
config: Config,

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/model/util/ExceptionUtils.kt

+31
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ fun toTitle(e: Throwable?): String {
2424

2525
fun toMessage(e: Throwable?): String {
2626
return noCurrentContextMessage(e)
27+
?: unknownHostMessage(e)
2728
?: recursiveGetMessage(e)
2829
?: "Unknown Error"
2930
}
@@ -48,3 +49,33 @@ fun noCurrentContextMessage(e: Throwable?): String? {
4849
null
4950
}
5051
}
52+
53+
fun unknownHostMessage(e: Throwable?): String? {
54+
val unknownHostException = recursiveGetThrowable(e) {
55+
throwable -> throwable is UnknownHostException
56+
}
57+
return if (unknownHostException is UnknownHostException) {
58+
"Unreachable cluster at ${getHost(unknownHostException)}."
59+
} else {
60+
null
61+
}
62+
}
63+
64+
private fun getHost(e: UnknownHostException): String? {
65+
val portions = e.message?.split(':') ?: return e.message
66+
return if (1 < portions.size) {
67+
portions[1]
68+
} else {
69+
e.message
70+
}
71+
}
72+
73+
private fun recursiveGetThrowable(e: Throwable?, predicate: (e: Throwable?) -> Boolean): Throwable? {
74+
return if (e == null
75+
|| e == e.cause
76+
|| predicate.invoke(e)) {
77+
e
78+
} else {
79+
recursiveGetThrowable(e.cause, predicate)
80+
}
81+
}

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/tree/TreeStructure.kt

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.redhat.devtools.intellij.kubernetes.model.util.hasDeletionTimestamp
3030
import com.redhat.devtools.intellij.kubernetes.model.util.isSameResource
3131
import com.redhat.devtools.intellij.kubernetes.model.util.isUnauthorized
3232
import com.redhat.devtools.intellij.kubernetes.model.util.isWillBeDeleted
33+
import com.redhat.devtools.intellij.kubernetes.model.util.unknownHostMessage
3334
import io.fabric8.kubernetes.api.model.HasMetadata
3435
import io.fabric8.kubernetes.client.KubernetesClientException
3536
import javax.swing.Icon
@@ -264,6 +265,10 @@ open class TreeStructure(
264265
}
265266

266267
private fun getMessage(e: Exception?): String {
268+
val unknownHostMessage = unknownHostMessage(e)
269+
if (unknownHostMessage != null) {
270+
return unknownHostMessage
271+
}
267272
val causeMessage = e?.cause?.message
268273
return if (causeMessage == null) {
269274
getMessageOrDefault(e)

0 commit comments

Comments
 (0)