mirror of https://github.com/k3s-io/k3s
Merge pull request #75734 from rhockenbury/automated-cherry-pick-of-#74919-upstream-release-1.14
Automated cherry pick of #74919: Fix Windows to read VM UUIDs from serial numberspull/564/head
commit
8465371a09
|
@ -48,6 +48,7 @@ const (
|
||||||
DummyDiskName = "kube-dummyDisk.vmdk"
|
DummyDiskName = "kube-dummyDisk.vmdk"
|
||||||
ProviderPrefix = "vsphere://"
|
ProviderPrefix = "vsphere://"
|
||||||
vSphereConfFileEnvVar = "VSPHERE_CONF_FILE"
|
vSphereConfFileEnvVar = "VSPHERE_CONF_FILE"
|
||||||
|
UUIDPrefix = "VMware-"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetVSphere reads vSphere configuration from system environment and construct vSphere object
|
// GetVSphere reads vSphere configuration from system environment and construct vSphere object
|
||||||
|
@ -675,3 +676,25 @@ func GetNodeUUID(node *v1.Node) (string, error) {
|
||||||
}
|
}
|
||||||
return GetUUIDFromProviderID(node.Spec.ProviderID), nil
|
return GetUUIDFromProviderID(node.Spec.ProviderID), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetVMUUID() (string, error) {
|
||||||
|
uuidFromFile, err := getRawUUID()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("error retrieving vm uuid: %s", err)
|
||||||
|
}
|
||||||
|
//strip leading and trailing white space and new line char
|
||||||
|
uuid := strings.TrimSpace(uuidFromFile)
|
||||||
|
// check the uuid starts with "VMware-"
|
||||||
|
if !strings.HasPrefix(uuid, UUIDPrefix) {
|
||||||
|
return "", fmt.Errorf("Failed to match Prefix, UUID read from the file is %v", uuidFromFile)
|
||||||
|
}
|
||||||
|
// Strip the prefix and white spaces and -
|
||||||
|
uuid = strings.Replace(uuid[len(UUIDPrefix):(len(uuid))], " ", "", -1)
|
||||||
|
uuid = strings.Replace(uuid, "-", "", -1)
|
||||||
|
if len(uuid) != 32 {
|
||||||
|
return "", fmt.Errorf("Length check failed, UUID read from the file is %v", uuidFromFile)
|
||||||
|
}
|
||||||
|
// need to add dashes, e.g. "564d395e-d807-e18a-cb25-b79f65eb2b9f"
|
||||||
|
uuid = fmt.Sprintf("%s-%s-%s-%s-%s", uuid[0:8], uuid[8:12], uuid[12:16], uuid[16:20], uuid[20:32])
|
||||||
|
return uuid, nil
|
||||||
|
}
|
||||||
|
|
|
@ -19,35 +19,15 @@ limitations under the License.
|
||||||
package vsphere
|
package vsphere
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const UUIDPath = "/sys/class/dmi/id/product_serial"
|
||||||
UUIDPath = "/sys/class/dmi/id/product_serial"
|
|
||||||
UUIDPrefix = "VMware-"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetVMUUID() (string, error) {
|
func getRawUUID() (string, error) {
|
||||||
id, err := ioutil.ReadFile(UUIDPath)
|
id, err := ioutil.ReadFile(UUIDPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("error retrieving vm uuid: %s", err)
|
return "", err
|
||||||
}
|
}
|
||||||
uuidFromFile := string(id[:])
|
return string(id), nil
|
||||||
//strip leading and trailing white space and new line char
|
|
||||||
uuid := strings.TrimSpace(uuidFromFile)
|
|
||||||
// check the uuid starts with "VMware-"
|
|
||||||
if !strings.HasPrefix(uuid, UUIDPrefix) {
|
|
||||||
return "", fmt.Errorf("Failed to match Prefix, UUID read from the file is %v", uuidFromFile)
|
|
||||||
}
|
|
||||||
// Strip the prefix and white spaces and -
|
|
||||||
uuid = strings.Replace(uuid[len(UUIDPrefix):(len(uuid))], " ", "", -1)
|
|
||||||
uuid = strings.Replace(uuid, "-", "", -1)
|
|
||||||
if len(uuid) != 32 {
|
|
||||||
return "", fmt.Errorf("Length check failed, UUID read from the file is %v", uuidFromFile)
|
|
||||||
}
|
|
||||||
// need to add dashes, e.g. "564d395e-d807-e18a-cb25-b79f65eb2b9f"
|
|
||||||
uuid = fmt.Sprintf("%s-%s-%s-%s-%s", uuid[0:8], uuid[8:12], uuid[12:16], uuid[16:20], uuid[20:32])
|
|
||||||
return uuid, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,6 @@ package vsphere
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func GetVMUUID() (string, error) {
|
func getRawUUID() (string, error) {
|
||||||
return "", fmt.Errorf("Retrieving VM UUID on this build is not implemented.")
|
return "", fmt.Errorf("Retrieving VM UUID on this build is not implemented.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,14 +24,21 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetVMUUID() (string, error) {
|
func getRawUUID() (string, error) {
|
||||||
result, err := exec.Command("wmic", "csproduct", "get", "UUID").Output()
|
result, err := exec.Command("wmic", "bios", "get", "serialnumber").Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("error retrieving vm uuid: %s", err)
|
return "", err
|
||||||
}
|
}
|
||||||
fields := strings.Fields(string(result))
|
lines := strings.FieldsFunc(string(result), func(r rune) bool {
|
||||||
if len(fields) != 2 {
|
switch r {
|
||||||
|
case '\n', '\r':
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if len(lines) != 2 {
|
||||||
return "", fmt.Errorf("received unexpected value retrieving vm uuid: %q", string(result))
|
return "", fmt.Errorf("received unexpected value retrieving vm uuid: %q", string(result))
|
||||||
}
|
}
|
||||||
return fields[1], nil
|
return lines[1], nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue