Move getKernelVersion to utils package

This commit is contained in:
Guillaume J. Charmes 2013-05-15 17:40:47 -07:00
parent 10e19e4b97
commit f3bab52df4
5 changed files with 88 additions and 9 deletions

View file

@ -251,7 +251,7 @@ func NewRuntime(autoRestart bool) (*Runtime, error) {
return nil, err
}
if k, err := GetKernelVersion(); err != nil {
if k, err := utils.GetKernelVersion(); err != nil {
log.Printf("WARNING: %s\n", err)
} else {
runtime.kernelVersion = k

View file

@ -1,9 +1,5 @@
package docker
import (
"github.com/dotcloud/docker/utils"
)
// Compare two Config struct. Do not compare the "Image" nor "Hostname" fields
// If OpenStdin is set, then it differs
func CompareConfig(a, b *Config) bool {
@ -51,7 +47,3 @@ func CompareConfig(a, b *Config) bool {
return true
}
func GetKernelVersion() (*utils.KernelVersionInfo, error) {
return getKernelVersion()
}

10
utils/uname_darwin.go Normal file
View file

@ -0,0 +1,10 @@
package utils
import (
"errors"
"syscall"
)
func uname() (*syscall.Utsname, error) {
return nil, errors.New("Kernel version detection is not available on darwin")
}

15
utils/uname_linux.go Normal file
View file

@ -0,0 +1,15 @@
package utils
import (
"syscall"
)
// FIXME: Move this to utils package
func uname() (*syscall.Utsname, error) {
uts := &syscall.Utsname{}
if err := syscall.Uname(uts); err != nil {
return nil, err
}
return uts, nil
}

View file

@ -14,6 +14,7 @@ import (
"os/exec"
"path/filepath"
"runtime"
"strconv"
"strings"
"sync"
"time"
@ -468,3 +469,64 @@ func FindCgroupMountpoint(cgroupType string) (string, error) {
return "", fmt.Errorf("cgroup mountpoint not found for %s", cgroupType)
}
func GetKernelVersion() (*KernelVersionInfo, error) {
var (
flavor string
kernel, major, minor int
err error
)
uts, err := uname()
if err != nil {
return nil, err
}
release := make([]byte, len(uts.Release))
i := 0
for _, c := range uts.Release {
release[i] = byte(c)
i++
}
// Remove the \x00 from the release for Atoi to parse correctly
release = release[:bytes.IndexByte(release, 0)]
tmp := strings.SplitN(string(release), "-", 2)
tmp2 := strings.SplitN(tmp[0], ".", 3)
if len(tmp2) > 0 {
kernel, err = strconv.Atoi(tmp2[0])
if err != nil {
return nil, err
}
}
if len(tmp2) > 1 {
major, err = strconv.Atoi(tmp2[1])
if err != nil {
return nil, err
}
}
if len(tmp2) > 2 {
minor, err = strconv.Atoi(tmp2[2])
if err != nil {
return nil, err
}
}
if len(tmp) == 2 {
flavor = tmp[1]
} else {
flavor = ""
}
return &KernelVersionInfo{
Kernel: kernel,
Major: major,
Minor: minor,
Flavor: flavor,
}, nil
}