mirror of https://github.com/docker/docs.git
56 lines
919 B
Go
56 lines
919 B
Go
package virtualbox
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type VirtualBoxVM struct {
|
|
CPUs int
|
|
Memory int
|
|
}
|
|
|
|
func parseVMInfo(r io.Reader) (*VirtualBoxVM, error) {
|
|
s := bufio.NewScanner(r)
|
|
vm := &VirtualBoxVM{}
|
|
for s.Scan() {
|
|
line := s.Text()
|
|
if line == "" {
|
|
continue
|
|
}
|
|
res := reEqualLine.FindStringSubmatch(line)
|
|
if res == nil {
|
|
continue
|
|
}
|
|
switch key, val := res[1], res[2]; key {
|
|
case "cpus":
|
|
v, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
vm.CPUs = v
|
|
case "memory":
|
|
v, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
vm.Memory = v
|
|
}
|
|
}
|
|
if err := s.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return vm, nil
|
|
}
|
|
|
|
func getVMInfo(name string) (*VirtualBoxVM, error) {
|
|
out, err := vbmOut("showvminfo", name, "--machinereadable")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
r := strings.NewReader(out)
|
|
return parseVMInfo(r)
|
|
}
|