mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 19:01:49 +00:00
Merge pull request #89138 from feiskyer/vmss-fix
Fix isCurrentInstance for Windows by removing the dependency of hostname
This commit is contained in:
commit
adf4ccab61
@ -21,7 +21,7 @@ package azure
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
@ -231,18 +231,22 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (bool, error) {
|
func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (bool, error) {
|
||||||
var err error
|
|
||||||
nodeName := mapNodeNameToVMName(name)
|
nodeName := mapNodeNameToVMName(name)
|
||||||
|
|
||||||
if az.VMType == vmTypeVMSS {
|
if az.VMType == vmTypeVMSS {
|
||||||
// VMSS vmName is not same with hostname, use hostname instead.
|
// VMSS vmName is not same with hostname, construct the node name "{computer-name-prefix}{base-36-instance-id}".
|
||||||
metadataVMName, err = os.Hostname()
|
// Refer https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-instance-ids#scale-set-vm-computer-name.
|
||||||
if err != nil {
|
if ssName, instanceID, err := extractVmssVMName(metadataVMName); err == nil {
|
||||||
return false, err
|
instance, err := strconv.ParseInt(instanceID, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("failed to parse VMSS instanceID %q: %v", instanceID, err)
|
||||||
|
}
|
||||||
|
metadataVMName = fmt.Sprintf("%s%06s", ssName, strconv.FormatInt(instance, 36))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
metadataVMName = strings.ToLower(metadataVMName)
|
metadataVMName = strings.ToLower(metadataVMName)
|
||||||
return (metadataVMName == nodeName), err
|
return (metadataVMName == nodeName), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstanceID returns the cloud provider ID of the specified instance.
|
// InstanceID returns the cloud provider ID of the specified instance.
|
||||||
|
@ -361,3 +361,56 @@ func TestNodeAddresses(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsCurrentInstance(t *testing.T) {
|
||||||
|
cloud := &Cloud{
|
||||||
|
Config: Config{
|
||||||
|
VMType: vmTypeVMSS,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
testcases := []struct {
|
||||||
|
nodeName string
|
||||||
|
metadataVMName string
|
||||||
|
expected bool
|
||||||
|
expectError bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
nodeName: "node1",
|
||||||
|
metadataVMName: "node1",
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nodeName: "node1",
|
||||||
|
metadataVMName: "node2",
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nodeName: "vmss000001",
|
||||||
|
metadataVMName: "vmss_1",
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nodeName: "vmss_2",
|
||||||
|
metadataVMName: "vmss000000",
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nodeName: "vmss123456",
|
||||||
|
metadataVMName: "vmss_$123",
|
||||||
|
expected: false,
|
||||||
|
expectError: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, test := range testcases {
|
||||||
|
real, err := cloud.isCurrentInstance(types.NodeName(test.nodeName), test.metadataVMName)
|
||||||
|
if test.expectError {
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Test[%d] unexpected nil err", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if real != test.expected {
|
||||||
|
t.Errorf("Test[%d] unexpected isCurrentInstance result %v != %v", i, real, test.expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user