From 7adb0a2656895d660eef17cd76212b74040b0a4a Mon Sep 17 00:00:00 2001 From: Angela Li Date: Tue, 23 Jul 2019 10:59:24 -0700 Subject: [PATCH 1/5] Set the systemUUID for windows nodes --- pkg/kubelet/winstats/winstats.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/winstats/winstats.go b/pkg/kubelet/winstats/winstats.go index b55560a7333..2b34bfd8ae4 100644 --- a/pkg/kubelet/winstats/winstats.go +++ b/pkg/kubelet/winstats/winstats.go @@ -20,6 +20,8 @@ limitations under the License. package winstats import ( + "os/exec" + "strings" "syscall" "time" "unsafe" @@ -103,9 +105,24 @@ func (c *StatsClient) WinContainerInfos() (map[string]cadvisorapiv2.ContainerInf } // WinMachineInfo returns a cadvisorapi.MachineInfo with details about the -// node machine. Analogous to cadvisor MachineInfo method. +// node machine. Run the powershell command to get the SystemUUID for Windows node +// in here if it isn't provided by cadvisor. func (c *StatsClient) WinMachineInfo() (*cadvisorapi.MachineInfo, error) { - return c.client.getMachineInfo() + infos, err := c.client.getMachineInfo() + if err != nil { + return nil, err + } + + if infos.SystemUUID == "" { + cmd := exec.Command("powershell.exe", "-Command", "(Get-CimInstance -Class Win32_ComputerSystemProduct).UUID") + out, err := cmd.CombinedOutput() + if err != nil { + return infos, err + } + infos.SystemUUID = strings.TrimRight(string(out), "\r\n") + } + + return infos, nil } // WinVersionInfo returns a cadvisorapi.VersionInfo with version info of From da966f33f400d6311c1cabc9ac45b3f641cbdad2 Mon Sep 17 00:00:00 2001 From: Angela Li Date: Tue, 23 Jul 2019 11:22:51 -0700 Subject: [PATCH 2/5] Add unit test --- pkg/kubelet/winstats/winstats_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index 45c33132c64..130c60f1709 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -56,6 +56,7 @@ func (f fakeWinNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, erro NumCores: 4, MemoryCapacity: 1.6e+10, MachineID: "somehostname", + SystemUUID: "", }, nil } @@ -115,10 +116,12 @@ func TestWinMachineInfo(t *testing.T) { machineInfo, err := c.WinMachineInfo() assert.NoError(t, err) + assert.NotEqual(t, machineInfo.SystemUUID, "") assert.Equal(t, machineInfo, &cadvisorapi.MachineInfo{ NumCores: 4, MemoryCapacity: 1.6e+10, - MachineID: "somehostname"}) + MachineID: "somehostname", + SystemUUID: machineInfo.SystemUUID,}) } func TestWinVersionInfo(t *testing.T) { From e56db7d40724b7f2307287cba99ab353637343fa Mon Sep 17 00:00:00 2001 From: Angela Li Date: Tue, 23 Jul 2019 13:25:12 -0700 Subject: [PATCH 3/5] Move to getMachineInfo() --- pkg/kubelet/winstats/perfcounter_nodestats.go | 18 ++++++++++++++++ pkg/kubelet/winstats/winstats.go | 21 ++----------------- pkg/kubelet/winstats/winstats_test.go | 2 +- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/pkg/kubelet/winstats/perfcounter_nodestats.go b/pkg/kubelet/winstats/perfcounter_nodestats.go index dc4ddf6fe24..9a22b047b32 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats.go @@ -21,7 +21,9 @@ package winstats import ( "errors" "os" + "os/exec" "runtime" + "strings" "sync" "time" "unsafe" @@ -136,10 +138,16 @@ func (p *perfCounterNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, return nil, err } + systemUUID, err := getSystemUUID() + if err != nil { + return nil, err + } + return &cadvisorapi.MachineInfo{ NumCores: runtime.NumCPU(), MemoryCapacity: p.nodeInfo.memoryPhysicalCapacityBytes, MachineID: hostname, + SystemUUID: systemUUID, }, nil } @@ -212,6 +220,16 @@ func (p *perfCounterNodeStatsClient) getCPUUsageNanoCores() uint64 { return cpuUsageNanoCores } +func getSystemUUID() (string, error) { + cmd := exec.Command("powershell.exe", "-Command", "(Get-CimInstance -Class Win32_ComputerSystemProduct).UUID") + out, err := cmd.CombinedOutput() + if err != nil { + return "", err + } + systemUUID := strings.TrimRight(string(out), "\r\n") + return systemUUID, nil +} + func getPhysicallyInstalledSystemMemoryBytes() (uint64, error) { // We use GlobalMemoryStatusEx instead of GetPhysicallyInstalledSystemMemory // on Windows node for the following reasons: diff --git a/pkg/kubelet/winstats/winstats.go b/pkg/kubelet/winstats/winstats.go index 2b34bfd8ae4..2b42cd850d7 100644 --- a/pkg/kubelet/winstats/winstats.go +++ b/pkg/kubelet/winstats/winstats.go @@ -20,8 +20,6 @@ limitations under the License. package winstats import ( - "os/exec" - "strings" "syscall" "time" "unsafe" @@ -105,24 +103,9 @@ func (c *StatsClient) WinContainerInfos() (map[string]cadvisorapiv2.ContainerInf } // WinMachineInfo returns a cadvisorapi.MachineInfo with details about the -// node machine. Run the powershell command to get the SystemUUID for Windows node -// in here if it isn't provided by cadvisor. +// node machine. func (c *StatsClient) WinMachineInfo() (*cadvisorapi.MachineInfo, error) { - infos, err := c.client.getMachineInfo() - if err != nil { - return nil, err - } - - if infos.SystemUUID == "" { - cmd := exec.Command("powershell.exe", "-Command", "(Get-CimInstance -Class Win32_ComputerSystemProduct).UUID") - out, err := cmd.CombinedOutput() - if err != nil { - return infos, err - } - infos.SystemUUID = strings.TrimRight(string(out), "\r\n") - } - - return infos, nil + return c.client.getMachineInfo() } // WinVersionInfo returns a cadvisorapi.VersionInfo with version info of diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index 130c60f1709..aa0fbefc616 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -121,7 +121,7 @@ func TestWinMachineInfo(t *testing.T) { NumCores: 4, MemoryCapacity: 1.6e+10, MachineID: "somehostname", - SystemUUID: machineInfo.SystemUUID,}) + SystemUUID: machineInfo.SystemUUID}) } func TestWinVersionInfo(t *testing.T) { From e242bbe12c6a62d247e2e9eec96a899ebb1c5ff4 Mon Sep 17 00:00:00 2001 From: Angela Li Date: Tue, 23 Jul 2019 15:59:32 -0700 Subject: [PATCH 4/5] Changed to use cmd for getting system uuid --- pkg/kubelet/winstats/perfcounter_nodestats.go | 11 +++++++---- pkg/kubelet/winstats/winstats.go | 2 +- pkg/kubelet/winstats/winstats_test.go | 5 ++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/winstats/perfcounter_nodestats.go b/pkg/kubelet/winstats/perfcounter_nodestats.go index 9a22b047b32..317c08bf028 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats.go @@ -20,6 +20,7 @@ package winstats import ( "errors" + "fmt" "os" "os/exec" "runtime" @@ -221,13 +222,15 @@ func (p *perfCounterNodeStatsClient) getCPUUsageNanoCores() uint64 { } func getSystemUUID() (string, error) { - cmd := exec.Command("powershell.exe", "-Command", "(Get-CimInstance -Class Win32_ComputerSystemProduct).UUID") - out, err := cmd.CombinedOutput() + result, err := exec.Command("wmic", "csproduct", "get", "UUID").Output() if err != nil { return "", err } - systemUUID := strings.TrimRight(string(out), "\r\n") - return systemUUID, nil + fields := strings.Fields(string(result)) + if len(fields) != 2 { + return "", fmt.Errorf("received unexpected value retrieving vm uuid: %q", string(result)) + } + return fields[1], nil } func getPhysicallyInstalledSystemMemoryBytes() (uint64, error) { diff --git a/pkg/kubelet/winstats/winstats.go b/pkg/kubelet/winstats/winstats.go index 2b42cd850d7..b55560a7333 100644 --- a/pkg/kubelet/winstats/winstats.go +++ b/pkg/kubelet/winstats/winstats.go @@ -103,7 +103,7 @@ func (c *StatsClient) WinContainerInfos() (map[string]cadvisorapiv2.ContainerInf } // WinMachineInfo returns a cadvisorapi.MachineInfo with details about the -// node machine. +// node machine. Analogous to cadvisor MachineInfo method. func (c *StatsClient) WinMachineInfo() (*cadvisorapi.MachineInfo, error) { return c.client.getMachineInfo() } diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index aa0fbefc616..d8c54137c63 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -56,7 +56,7 @@ func (f fakeWinNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, erro NumCores: 4, MemoryCapacity: 1.6e+10, MachineID: "somehostname", - SystemUUID: "", + SystemUUID: "E6C8AC43-582B-3575-4E1F-6DA170888906", }, nil } @@ -116,12 +116,11 @@ func TestWinMachineInfo(t *testing.T) { machineInfo, err := c.WinMachineInfo() assert.NoError(t, err) - assert.NotEqual(t, machineInfo.SystemUUID, "") assert.Equal(t, machineInfo, &cadvisorapi.MachineInfo{ NumCores: 4, MemoryCapacity: 1.6e+10, MachineID: "somehostname", - SystemUUID: machineInfo.SystemUUID}) + SystemUUID: "E6C8AC43-582B-3575-4E1F-6DA170888906"}) } func TestWinVersionInfo(t *testing.T) { From 6acc08508c264e590198fc53f39ef0353c30840c Mon Sep 17 00:00:00 2001 From: Angela Li Date: Tue, 23 Jul 2019 16:01:39 -0700 Subject: [PATCH 5/5] fix lint --- pkg/kubelet/winstats/winstats_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index d8c54137c63..50dc98d68c6 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -56,7 +56,7 @@ func (f fakeWinNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, erro NumCores: 4, MemoryCapacity: 1.6e+10, MachineID: "somehostname", - SystemUUID: "E6C8AC43-582B-3575-4E1F-6DA170888906", + SystemUUID: "E6C8AC43-582B-3575-4E1F-6DA170888906", }, nil }