@@ -47,6 +47,26 @@ import (
4747
4848const 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+
5070var _ cloudprovider.CloudProvider = (* CloudProvider )(nil )
5171
5272type 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+ }
0 commit comments