123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package operatingsystem // import "github.com/docker/docker/pkg/parsers/operatingsystem"
- import (
- "fmt"
- "github.com/docker/docker/pkg/system"
- "golang.org/x/sys/windows/registry"
- )
- // GetOperatingSystem gets the name of the current operating system.
- func GetOperatingSystem() (string, error) {
- os, err := withCurrentVersionRegistryKey(func(key registry.Key) (os string, err error) {
- if os, _, err = key.GetStringValue("ProductName"); err != nil {
- return "", err
- }
- releaseId, _, err := key.GetStringValue("ReleaseId")
- if err != nil {
- return
- }
- os = fmt.Sprintf("%s Version %s", os, releaseId)
- buildNumber, _, err := key.GetStringValue("CurrentBuildNumber")
- if err != nil {
- return
- }
- ubr, _, err := key.GetIntegerValue("UBR")
- if err != nil {
- return
- }
- os = fmt.Sprintf("%s (OS Build %s.%d)", os, buildNumber, ubr)
- return
- })
- if os == "" {
- // Default return value
- os = "Unknown Operating System"
- }
- return os, err
- }
- func withCurrentVersionRegistryKey(f func(registry.Key) (string, error)) (string, error) {
- key, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
- if err != nil {
- return "", err
- }
- defer key.Close()
- return f(key)
- }
- // GetOperatingSystemVersion gets the version of the current operating system, as a string.
- func GetOperatingSystemVersion() (string, error) {
- version := system.GetOSVersion()
- return fmt.Sprintf("%d.%d.%d", version.MajorVersion, version.MinorVersion, version.Build), nil
- }
- // IsContainerized returns true if we are running inside a container.
- // No-op on Windows, always returns false.
- func IsContainerized() (bool, error) {
- return false, nil
- }
|