Procházet zdrojové kódy

hostinfo: determine QNAP QTS version

Signed-off-by: Denton Gentry <[email protected]>
Denton Gentry před 3 roky
rodič
revize
4dd799ec43
2 změnil soubory, kde provedl 51 přidání a 0 odebrání
  1. 13 0
      hostinfo/hostinfo_linux.go
  2. 38 0
      hostinfo/hostinfo_linux_test.go

+ 13 - 0
hostinfo/hostinfo_linux.go

@@ -48,7 +48,17 @@ func linuxDeviceModel() string {
 	return ""
 }
 
+func getQnapQtsVersion(versionInfo string) string {
+	for _, field := range strings.Fields(versionInfo) {
+		if suffix := strings.TrimPrefix(field, "QTSFW_"); suffix != field {
+			return "QTS " + suffix
+		}
+	}
+	return ""
+}
+
 func osVersionLinux() string {
+	// TODO(bradfitz,dgentry): cache this, or make caller(s) cache it.
 	dist := distro.Get()
 	propFile := "/etc/os-release"
 	switch dist {
@@ -59,6 +69,9 @@ func osVersionLinux() string {
 	case distro.WDMyCloud:
 		slurp, _ := ioutil.ReadFile("/etc/version")
 		return fmt.Sprintf("%s", string(bytes.TrimSpace(slurp)))
+	case distro.QNAP:
+		slurp, _ := ioutil.ReadFile("/etc/version_info")
+		return getQnapQtsVersion(string(slurp))
 	}
 
 	m := map[string]string{}

+ 38 - 0
hostinfo/hostinfo_linux_test.go

@@ -0,0 +1,38 @@
+// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build linux && !android
+// +build linux,!android
+
+package hostinfo
+
+import (
+	"testing"
+)
+
+func TestQnap(t *testing.T) {
+	version_info := `commit 2910d3a594b068024ed01a64a0fe4168cb001a12
+Date:   2022-05-30 16:08:45 +0800
+================================================
+* QTSFW_5.0.0
+remotes/origin/QTSFW_5.0.0`
+
+	got := getQnapQtsVersion(version_info)
+	want := "QTS 5.0.0"
+	if got != want {
+		t.Errorf("got %q; want %q", got, want)
+	}
+
+	got = getQnapQtsVersion("")
+	want = ""
+	if got != want {
+		t.Errorf("got %q; want %q", got, want)
+	}
+
+	got = getQnapQtsVersion("just a bunch of junk")
+	want = ""
+	if got != want {
+		t.Errorf("got %q; want %q", got, want)
+	}
+}