From 1a96cf95ca23b62ba71f9bd8e8a4fb176bcf243b Mon Sep 17 00:00:00 2001 From: Carlos de Paula Date: Sun, 15 Sep 2019 11:15:27 -0400 Subject: [PATCH] Parse runtime name Signed-off-by: Carlos de Paula --- daemon/info_unix.go | 13 +++++++------ daemon/info_unix_test.go | 9 +++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/daemon/info_unix.go b/daemon/info_unix.go index 0e30de0f9f..c2a3d9a286 100644 --- a/daemon/info_unix.go +++ b/daemon/info_unix.go @@ -35,7 +35,7 @@ func (daemon *Daemon) fillPlatformInfo(v *types.Info, sysInfo *sysinfo.SysInfo) defaultRuntimeBinary := daemon.configStore.GetRuntime(v.DefaultRuntime).Path if rv, err := exec.Command(defaultRuntimeBinary, "--version").Output(); err == nil { - if _, commit, err := parseRuncVersion(string(rv)); err != nil { + if _, _, commit, err := parseRuntimeVersion(string(rv)); err != nil { logrus.Warnf("failed to parse %s version: %v", defaultRuntimeBinary, err) v.RuncCommit.ID = "N/A" } else { @@ -131,7 +131,7 @@ func (daemon *Daemon) fillPlatformVersion(v *types.Version) { defaultRuntime := daemon.configStore.GetDefaultRuntimeName() defaultRuntimeBinary := daemon.configStore.GetRuntime(defaultRuntime).Path if rv, err := exec.Command(defaultRuntimeBinary, "--version").Output(); err == nil { - if ver, commit, err := parseRuncVersion(string(rv)); err != nil { + if _, ver, commit, err := parseRuntimeVersion(string(rv)); err != nil { logrus.Warnf("failed to parse %s version: %v", defaultRuntimeBinary, err) } else { v.Components = append(v.Components, types.ComponentVersion{ @@ -222,19 +222,20 @@ func parseInitVersion(v string) (version string, commit string, err error) { return version, commit, err } -// parseRuncVersion parses the output of `runc --version` and extracts the -// "version" and "git commit" from the output. +// parseRuntimeVersion parses the output of `[runtime] --version` and extracts the +// "name", "version" and "git commit" from the output. // // Output example from `runc --version`: // // runc version 1.0.0-rc5+dev // commit: 69663f0bd4b60df09991c08812a60108003fa340 // spec: 1.0.0 -func parseRuncVersion(v string) (version string, commit string, err error) { +func parseRuntimeVersion(v string) (runtime string, version string, commit string, err error) { lines := strings.Split(strings.TrimSpace(v), "\n") for _, line := range lines { if strings.Contains(line, "version") { s := strings.Split(line, "version") + runtime = strings.TrimSpace(s[0]) version = strings.TrimSpace(s[len(s)-1]) continue } @@ -246,7 +247,7 @@ func parseRuncVersion(v string) (version string, commit string, err error) { if version == "" && commit == "" { err = errors.Errorf("unknown output format: %s", v) } - return version, commit, err + return runtime, version, commit, err } func (daemon *Daemon) cgroupNamespacesEnabled(sysInfo *sysinfo.SysInfo) bool { diff --git a/daemon/info_unix_test.go b/daemon/info_unix_test.go index c890c59db4..0c8399512b 100644 --- a/daemon/info_unix_test.go +++ b/daemon/info_unix_test.go @@ -50,9 +50,10 @@ func TestParseInitVersion(t *testing.T) { } } -func TestParseRuncVersion(t *testing.T) { +func parseRuncVersion(t *testing.T) { tests := []struct { output string + runtime string version string commit string invalid bool @@ -63,6 +64,7 @@ runc version 1.0.0-rc5+dev commit: 69663f0bd4b60df09991c08812a60108003fa340 spec: 1.0.0 `, + runtime: "runc", version: "1.0.0-rc5+dev", commit: "69663f0bd4b60df09991c08812a60108003fa340", }, @@ -71,6 +73,7 @@ spec: 1.0.0 runc version 1.0.0-rc5+dev spec: 1.0.0 `, + runtime: "runc", version: "1.0.0-rc5+dev", }, { @@ -86,6 +89,7 @@ crun version 0.7 spec: 1.0.0 +SYSTEMD +SELINUX +CAP +SECCOMP +EBPF +YAJL `, + runtime: "crun", version: "0.7", }, { @@ -99,12 +103,13 @@ spec: 1.0.0 } for _, test := range tests { - version, commit, err := parseRuncVersion(string(test.output)) + runtime, version, commit, err := parseRuntimeVersion(string(test.output)) if test.invalid { assert.Check(t, is.ErrorContains(err, "")) } else { assert.Check(t, err) } + assert.Equal(t, test.runtime, runtime) assert.Equal(t, test.version, version) assert.Equal(t, test.commit, commit) }