From 26ef4e42e5c85d393ade1ca11cb725488ddabc9f Mon Sep 17 00:00:00 2001 From: Mark Rossetti Date: Wed, 10 Jul 2024 11:36:15 -0700 Subject: [PATCH] Updating kubelet on Windows to query uuid from registry --- pkg/kubelet/winstats/perfcounter_nodestats.go | 22 +++++++++++-------- .../winstats/perfcounter_nodestats_test.go | 12 ++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/pkg/kubelet/winstats/perfcounter_nodestats.go b/pkg/kubelet/winstats/perfcounter_nodestats.go index 992f96d7fbe..c8412f1af2f 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats.go @@ -20,10 +20,7 @@ limitations under the License. package winstats import ( - "errors" - "fmt" "os" - "os/exec" "runtime" "strconv" "strings" @@ -33,6 +30,7 @@ import ( "unsafe" cadvisorapi "github.com/google/cadvisor/info/v1" + "github.com/pkg/errors" "golang.org/x/sys/windows" "golang.org/x/sys/windows/registry" "k8s.io/apimachinery/pkg/util/wait" @@ -256,15 +254,21 @@ func (p *perfCounterNodeStatsClient) getCPUUsageNanoCores() uint64 { } func getSystemUUID() (string, error) { - result, err := exec.Command("wmic", "csproduct", "get", "UUID").Output() + k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\HardwareConfig`, registry.QUERY_VALUE) if err != nil { - return "", err + return "", errors.Wrap(err, "failed to open registry key HKLM\\SYSTEM\\HardwareConfig") } - fields := strings.Fields(string(result)) - if len(fields) != 2 { - return "", fmt.Errorf("received unexpected value retrieving vm uuid: %q", string(result)) + defer k.Close() + + uuid, _, err := k.GetStringValue("LastConfig") + if err != nil { + return "", errors.Wrap(err, "failed to read registry value LastConfig from key HKLM\\SYSTEM\\HardwareConfig") } - return fields[1], nil + + uuid = strings.Trim(uuid, "{") + uuid = strings.Trim(uuid, "}") + uuid = strings.ToUpper(uuid) + return uuid, nil } func getPhysicallyInstalledSystemMemoryBytes() (uint64, error) { diff --git a/pkg/kubelet/winstats/perfcounter_nodestats_test.go b/pkg/kubelet/winstats/perfcounter_nodestats_test.go index 80800786c24..abf68a4f716 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats_test.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats_test.go @@ -21,7 +21,9 @@ package winstats import ( "os" + "os/exec" "strconv" + "strings" "testing" "time" @@ -188,3 +190,13 @@ func testGetPhysicallyInstalledSystemMemoryBytes(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, totalMemory) } + +func TestGetSystemUUID(t *testing.T) { + uuidFromRegistry, err := getSystemUUID() + assert.NoError(t, err) + + uuidFromWmi, err := exec.Command("powershell.exe", "Get-WmiObject", "Win32_ComputerSystemProduct", "|", "Select-Object", "-ExpandProperty UUID").Output() + assert.NoError(t, err) + uuidFromWmiString := strings.Trim(string(uuidFromWmi), "\r\n") + assert.Equal(t, uuidFromWmiString, uuidFromRegistry) +}