kata-env: kata-env error out when there is no VERSION_ID.

For example, under debian buster/sid. Those information should be
provide with best effort instead of error out. Set name and version
to "<<unknown>>" if they are not defined.

Fixes: #1177

Signed-off-by: Yang Bo <bo@hyper.sh>
This commit is contained in:
Yang Bo 2019-01-28 09:27:21 +08:00
parent 29dae85ad5
commit 4f51687550
3 changed files with 20 additions and 8 deletions

View File

@ -478,7 +478,7 @@ func TestEnvGetHostInfoNoOSRelease(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
_, err = getHostInfo() _, err = getHostInfo()
assert.Error(t, err) assert.NoError(t, err)
} }
func TestEnvGetHostInfoNoProcVersion(t *testing.T) { func TestEnvGetHostInfoNoProcVersion(t *testing.T) {
@ -600,7 +600,7 @@ func TestEnvGetEnvInfoNoOSRelease(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
_, err = getEnvInfo(configFile, config) _, err = getEnvInfo(configFile, config)
assert.Error(t, err) assert.NoError(t, err)
} }
func TestEnvGetEnvInfoNoProcCPUInfo(t *testing.T) { func TestEnvGetEnvInfoNoProcCPUInfo(t *testing.T) {

View File

@ -48,6 +48,8 @@ func getKernelVersion() (string, error) {
// returned. // returned.
func getDistroDetails() (name, version string, err error) { func getDistroDetails() (name, version string, err error) {
files := []string{osRelease, osReleaseClr} files := []string{osRelease, osReleaseClr}
name = ""
version = ""
for _, file := range files { for _, file := range files {
contents, err := katautils.GetFileContents(file) contents, err := katautils.GetFileContents(file)
@ -62,10 +64,10 @@ func getDistroDetails() (name, version string, err error) {
lines := strings.Split(contents, "\n") lines := strings.Split(contents, "\n")
for _, line := range lines { for _, line := range lines {
if strings.HasPrefix(line, "NAME=") { if strings.HasPrefix(line, "NAME=") && name == "" {
fields := strings.Split(line, "=") fields := strings.Split(line, "=")
name = strings.Trim(fields[1], `"`) name = strings.Trim(fields[1], `"`)
} else if strings.HasPrefix(line, "VERSION_ID=") { } else if strings.HasPrefix(line, "VERSION_ID=") && version == "" {
fields := strings.Split(line, "=") fields := strings.Split(line, "=")
version = strings.Trim(fields[1], `"`) version = strings.Trim(fields[1], `"`)
} }
@ -76,7 +78,15 @@ func getDistroDetails() (name, version string, err error) {
} }
} }
return "", "", fmt.Errorf("failed to find expected fields in one of %v", files) if name == "" {
name = unknown
}
if version == "" {
version = unknown
}
return name, version, nil
} }
// genericGetCPUDetails returns the vendor and model of the CPU. // genericGetCPUDetails returns the vendor and model of the CPU.

View File

@ -101,6 +101,8 @@ func TestGetDistroDetails(t *testing.T) {
expectError bool expectError bool
} }
const unknown = "<<unknown>>"
tmpdir, err := ioutil.TempDir("", "") tmpdir, err := ioutil.TempDir("", "")
if err != nil { if err != nil {
panic(err) panic(err)
@ -144,11 +146,11 @@ VERSION_ID="%s"
_, _, err = getDistroDetails() _, _, err = getDistroDetails()
// ENOENT // ENOENT
assert.Error(t, err) assert.NoError(t, err)
data := []testData{ data := []testData{
{"", "", "", "", true}, {"", "", unknown, unknown, false},
{"invalid", "", "", "", true}, {"invalid", "", unknown, unknown, false},
{clrContents, "", clrExpectedName, clrExpectedVersion, false}, {clrContents, "", clrExpectedName, clrExpectedVersion, false},
{"", nonClrContents, nonClrExpectedName, nonClrExpectedVersion, false}, {"", nonClrContents, nonClrExpectedName, nonClrExpectedVersion, false},
{clrContents, nonClrContents, nonClrExpectedName, nonClrExpectedVersion, false}, {clrContents, nonClrContents, nonClrExpectedName, nonClrExpectedVersion, false},