@@ -59,6 +59,21 @@ func (e *exoscaleCloudProvider) NodeGroups() []cloudprovider.NodeGroup {
5959// should not be processed by cluster autoscaler, or non-nil error if such
6060// occurred. Must be implemented.
6161func (e * exoscaleCloudProvider ) NodeGroupForNode (node * apiv1.Node ) (cloudprovider.NodeGroup , error ) {
62+ // Fast path: Check for nodepool-id label to avoid API calls
63+ if nodepoolID , hasLabel := node .Labels ["node.exoscale.net/nodepool-id" ]; hasLabel {
64+ // Try to find existing nodegroup with this SKS nodepool ID
65+ for _ , ng := range e .manager .nodeGroups {
66+ // Check if this is an SKS nodepool nodegroup
67+ if sksNG , ok := ng .(* sksNodepoolNodeGroup ); ok {
68+ if * sksNG .sksNodepool .ID == nodepoolID {
69+ debugf ("found SKS nodegroup %s for node %s using nodepool-id label" , nodepoolID , node .Name )
70+ return ng , nil
71+ }
72+ }
73+ }
74+ debugf ("nodepool-id label found (%s) but no matching SKS nodegroup, falling back to API lookup" , nodepoolID )
75+ }
76+
6277 instancePool , err := e .instancePoolFromNode (node )
6378 if err != nil {
6479 if err == errNoInstancePool {
@@ -77,7 +92,7 @@ func (e *exoscaleCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovide
7792 sksNodepool * egoscale.SKSNodepool
7893 )
7994
80- sksClusters , err := e .manager .client . ListSKSClusters (e .manager .ctx , e .manager .zone )
95+ sksClusters , err := e .manager .ListSKSClustersCached (e .manager .ctx , e .manager .zone )
8196 if err != nil {
8297 errorf ("unable to list SKS clusters: %v" , err )
8398 return nil , err
@@ -264,7 +279,7 @@ func (e *exoscaleCloudProvider) instancePoolFromNode(node *apiv1.Node) (*egoscal
264279
265280 debugf ("looking up node group for node ID %s" , nodeID )
266281
267- instance , err := e .manager .client . GetInstance (e .manager .ctx , e .manager .zone , nodeID )
282+ instance , err := e .manager .GetInstanceCached (e .manager .ctx , e .manager .zone , nodeID )
268283 if err != nil {
269284 return nil , err
270285 }
@@ -273,5 +288,5 @@ func (e *exoscaleCloudProvider) instancePoolFromNode(node *apiv1.Node) (*egoscal
273288 return nil , errNoInstancePool
274289 }
275290
276- return e .manager .client . GetInstancePool (e .manager .ctx , e .manager .zone , instance .Manager .ID )
291+ return e .manager .GetInstancePoolCached (e .manager .ctx , e .manager .zone , instance .Manager .ID )
277292}
0 commit comments