Merge pull request #126012 from marosset/windows-kubelet-get-uuid-from-registry
Updating kubelet on Windows to query uuid from registry
This commit is contained in:
		@@ -20,10 +20,7 @@ limitations under the License.
 | 
				
			|||||||
package winstats
 | 
					package winstats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/exec"
 | 
					 | 
				
			||||||
	"runtime"
 | 
						"runtime"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
@@ -33,6 +30,7 @@ import (
 | 
				
			|||||||
	"unsafe"
 | 
						"unsafe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cadvisorapi "github.com/google/cadvisor/info/v1"
 | 
						cadvisorapi "github.com/google/cadvisor/info/v1"
 | 
				
			||||||
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"golang.org/x/sys/windows"
 | 
						"golang.org/x/sys/windows"
 | 
				
			||||||
	"golang.org/x/sys/windows/registry"
 | 
						"golang.org/x/sys/windows/registry"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
@@ -256,15 +254,21 @@ func (p *perfCounterNodeStatsClient) getCPUUsageNanoCores() uint64 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getSystemUUID() (string, error) {
 | 
					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 {
 | 
						if err != nil {
 | 
				
			||||||
		return "", err
 | 
							return "", errors.Wrap(err, "failed to open registry key HKLM\\SYSTEM\\HardwareConfig")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fields := strings.Fields(string(result))
 | 
						defer k.Close()
 | 
				
			||||||
	if len(fields) != 2 {
 | 
					
 | 
				
			||||||
		return "", fmt.Errorf("received unexpected value retrieving vm uuid: %q", string(result))
 | 
						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) {
 | 
					func getPhysicallyInstalledSystemMemoryBytes() (uint64, error) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,9 @@ package winstats
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
						"os/exec"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -188,3 +190,13 @@ func testGetPhysicallyInstalledSystemMemoryBytes(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.NotZero(t, totalMemory)
 | 
						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)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user