Skip to content

Commit ad3b88b

Browse files
committed
feat(cloudprovider): add IBM disruption reasons
Signed-off-by: Anand Nekkunti <anand.nekkunti@ibm.com>
1 parent e6f7317 commit ad3b88b

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

pkg/cloudprovider/cloudprovider.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,26 @@ import (
4747

4848
const CloudProviderName = "ibmcloud"
4949

50+
// Disruption reasons specific to the IBM Cloud provider.
51+
// They are used to surface why nodes were disrupted (drift, quota issues, etc)
52+
// through Karpenter's disruption events and metrics.
53+
const (
54+
// DisruptionReasonVPCQuotaExceeded indicates the VPC/Network quota was exceeded
55+
// (for example, no more IP addresses available or VPC resource quota reached)
56+
// which prevented provisioning or caused instance failures.
57+
DisruptionReasonVPCQuotaExceeded karpv1.DisruptionReason = "VPCQuotaExceeded"
58+
59+
// DisruptionReasonAPIRateLimited indicates disruption due to IBM Cloud
60+
// API rate limiting (throttling), where provisioning/sync operations
61+
// repeatedly failed with rate-limit errors.
62+
DisruptionReasonAPIRateLimited karpv1.DisruptionReason = "APIRateLimited"
63+
64+
// DisruptionReasonInstanceTerminated indicates the instance was terminated
65+
// (e.g., by user action, by cloud provider lifecycle, or due to an underlying
66+
// platform event).
67+
DisruptionReasonInstanceTerminated karpv1.DisruptionReason = "InstanceTerminated"
68+
)
69+
5070
var _ cloudprovider.CloudProvider = (*CloudProvider)(nil)
5171

5272
type CloudProvider struct {
@@ -651,3 +671,12 @@ func (c *CloudProvider) RepairPolicies() []cloudprovider.RepairPolicy {
651671
},
652672
}
653673
}
674+
675+
// DisruptionReasons returns the IBM Cloud provider disruption reasons.
676+
func (c *CloudProvider) DisruptionReasons() []karpv1.DisruptionReason {
677+
return []karpv1.DisruptionReason{
678+
DisruptionReasonVPCQuotaExceeded,
679+
DisruptionReasonAPIRateLimited,
680+
DisruptionReasonInstanceTerminated,
681+
}
682+
}

pkg/cloudprovider/cloudprovider_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,3 +1123,21 @@ func TestCloudProvider_List(t *testing.T) {
11231123
})
11241124
}
11251125
}
1126+
1127+
func TestDisruptionReasonConstants(t *testing.T) {
1128+
assert.Equal(t, karpv1.DisruptionReason("VPCQuotaExceeded"), DisruptionReasonVPCQuotaExceeded)
1129+
assert.Equal(t, karpv1.DisruptionReason("APIRateLimited"), DisruptionReasonAPIRateLimited)
1130+
assert.Equal(t, karpv1.DisruptionReason("InstanceTerminated"), DisruptionReasonInstanceTerminated)
1131+
}
1132+
1133+
func TestDisruptionReasons(t *testing.T) {
1134+
cp := &CloudProvider{}
1135+
expected := []karpv1.DisruptionReason{
1136+
DisruptionReasonVPCQuotaExceeded,
1137+
DisruptionReasonAPIRateLimited,
1138+
DisruptionReasonInstanceTerminated,
1139+
}
1140+
got := cp.DisruptionReasons()
1141+
assert.ElementsMatch(t, expected, got)
1142+
1143+
}

0 commit comments

Comments
 (0)