|
@@ -11,6 +11,7 @@ import (
|
|
|
"github.com/docker/docker/api/types"
|
|
|
"github.com/docker/docker/dockerversion"
|
|
|
"github.com/docker/docker/pkg/sysinfo"
|
|
|
+ "github.com/pkg/errors"
|
|
|
)
|
|
|
|
|
|
// FillPlatformInfo fills the platform related info.
|
|
@@ -54,32 +55,37 @@ func (daemon *Daemon) FillPlatformInfo(v *types.Info, sysInfo *sysinfo.SysInfo)
|
|
|
v.RuncCommit.ID = "N/A"
|
|
|
}
|
|
|
|
|
|
- v.InitCommit.Expected = dockerversion.InitCommitID
|
|
|
if rv, err := exec.Command(DefaultInitBinary, "--version").Output(); err == nil {
|
|
|
- // examples of how Tini outputs version info:
|
|
|
- // "tini version 0.13.0 - git.949e6fa"
|
|
|
- // "tini version 0.13.2"
|
|
|
- parts := strings.Split(strings.TrimSpace(string(rv)), " - ")
|
|
|
+ ver, err := parseInitVersion(string(rv))
|
|
|
|
|
|
- v.InitCommit.ID = ""
|
|
|
- if v.InitCommit.ID == "" && len(parts) >= 2 {
|
|
|
- gitParts := strings.Split(parts[1], ".")
|
|
|
- if len(gitParts) == 2 && gitParts[0] == "git" {
|
|
|
- v.InitCommit.ID = gitParts[1]
|
|
|
- v.InitCommit.Expected = dockerversion.InitCommitID[0:len(v.InitCommit.ID)]
|
|
|
- }
|
|
|
- }
|
|
|
- if v.InitCommit.ID == "" && len(parts) >= 1 {
|
|
|
- vs := strings.TrimPrefix(parts[0], "tini version ")
|
|
|
- v.InitCommit.ID = "v" + vs
|
|
|
- }
|
|
|
-
|
|
|
- if v.InitCommit.ID == "" {
|
|
|
- logrus.Warnf("failed to retrieve %s version: unknown output format: %s", DefaultInitBinary, string(rv))
|
|
|
- v.InitCommit.ID = "N/A"
|
|
|
+ if err != nil {
|
|
|
+ logrus.Warnf("failed to retrieve %s version: %s", DefaultInitBinary, err)
|
|
|
}
|
|
|
+ v.InitCommit = ver
|
|
|
} else {
|
|
|
- logrus.Warnf("failed to retrieve %s version", DefaultInitBinary)
|
|
|
+ logrus.Warnf("failed to retrieve %s version: %s", DefaultInitBinary, err)
|
|
|
v.InitCommit.ID = "N/A"
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// parseInitVersion parses a Tini version string, and extracts the version.
|
|
|
+func parseInitVersion(v string) (types.Commit, error) {
|
|
|
+ version := types.Commit{ID: "", Expected: dockerversion.InitCommitID}
|
|
|
+ parts := strings.Split(strings.TrimSpace(v), " - ")
|
|
|
+
|
|
|
+ if len(parts) >= 2 {
|
|
|
+ gitParts := strings.Split(parts[1], ".")
|
|
|
+ if len(gitParts) == 2 && gitParts[0] == "git" {
|
|
|
+ version.ID = gitParts[1]
|
|
|
+ version.Expected = dockerversion.InitCommitID[0:len(version.ID)]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if version.ID == "" && strings.HasPrefix(parts[0], "tini version ") {
|
|
|
+ version.ID = "v" + strings.TrimPrefix(parts[0], "tini version ")
|
|
|
+ }
|
|
|
+ if version.ID == "" {
|
|
|
+ version.ID = "N/A"
|
|
|
+ return version, errors.Errorf("unknown output format: %s", v)
|
|
|
+ }
|
|
|
+ return version, nil
|
|
|
+}
|