diff --git a/util/src/main/java/io/kubernetes/client/util/taints/Taints.java b/util/src/main/java/io/kubernetes/client/util/taints/Taints.java index d45679e087..e08af3db37 100644 --- a/util/src/main/java/io/kubernetes/client/util/taints/Taints.java +++ b/util/src/main/java/io/kubernetes/client/util/taints/Taints.java @@ -38,6 +38,9 @@ public String toString() { } public static V1Taint findTaint(V1Node node, String key, Effect effect) { + if (node.getSpec() == null || node.getSpec().getTaints() == null) { + return null; + } for (V1Taint taint : node.getSpec().getTaints()) { if (taint.getKey().equals(key) && taint.getEffect().equals(effect.toString())) { return taint; diff --git a/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java b/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java index 7521dd0988..05d6317d5f 100644 --- a/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java +++ b/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java @@ -65,4 +65,12 @@ void noExecuteTaints() { assertThat(Taints.findTaint(node, "key1", Taints.Effect.NO_EXECUTE).getEffect()) .isEqualTo(effect); } + + @Test + void findTaintWithoutSpecReturnsNull() { + // A node without a spec (or without a taints list) must not NPE; it simply has no taints, + // consistent with the null-spec handling in removeTaint. + V1Node node = new V1Node(); + assertThat(Taints.findTaint(node, "key1", Taints.Effect.NO_SCHEDULE)).isNull(); + } }