Skip to content

Commit

Permalink
Merge pull request #6722 from hetznercloud/hetzner-invalid-providerid…
Browse files Browse the repository at this point in the history
…-1.27

[v1.27][Hetzner] Fix Autoscaling for worker nodes with invalid ProviderID
  • Loading branch information
k8s-ci-robot authored Apr 18, 2024
2 parents e7d2c7e + 02947f6 commit aa32387
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
10 changes: 10 additions & 0 deletions cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,19 @@ func (m *hetznerManager) addNodeToDrainingPool(node *apiv1.Node) (*hetznerNodeGr
return m.nodeGroups[drainingNodePoolId], nil
}

func (m *hetznerManager) validProviderID(providerID string) bool {
return strings.HasPrefix(providerID, providerIDPrefix)
}

func (m *hetznerManager) serverForNode(node *apiv1.Node) (*hcloud.Server, error) {
var nodeIdOrName string
if node.Spec.ProviderID != "" {
if !m.validProviderID(node.Spec.ProviderID) {
// This cluster-autoscaler provider only handles Hetzner Cloud servers.
// Any other provider ID prefix is invalid, and we return no server. Returning an error here breaks hybrid
// clusters with nodes from Hetzner Cloud & Robot (or other providers).
return nil, nil
}
nodeIdOrName = strings.TrimPrefix(node.Spec.ProviderID, providerIDPrefix)
} else {
nodeIdOrName = node.Name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package hetzner

import (
"context"
"errors"
"strconv"
"sync"
"time"
Expand Down Expand Up @@ -136,7 +135,8 @@ func (m *serversCache) getServer(nodeIdOrName string) (*hcloud.Server, error) {
}
}

return nil, errors.New("server not found")
// return nil if server not found
return nil, nil
}

func (m *serversCache) getServersByNodeGroupName(nodeGroup string) ([]*hcloud.Server, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ func TestServersCache(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, "test2", foundservers.Name)

_, err = c.getServer("test3")
require.Error(t, err)
server, err := c.getServer("test3")
require.Nil(t, server)
require.NoError(t, err)
}

0 comments on commit aa32387

Please sign in to comment.