hostinfo: add SetOSVersion like SetDeviceModel, deprecate ipn.Prefs way

Turns out the iOS client has been only sending the OS version it first
started at. This whole hostinfo-via-prefs mechanism was never a good idea.
Start removing it.

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2021-10-05 13:23:47 -07:00
committed by Brad Fitzpatrick
parent 98b3fa78aa
commit 81269fad28
3 changed files with 27 additions and 9 deletions

View File

@@ -20,27 +20,33 @@ import (
"tailscale.com/version"
)
var osVersion func() string // non-nil on some platforms
// New returns a partially populated Hostinfo for the current host.
func New() *tailcfg.Hostinfo {
hostname, _ := os.Hostname()
hostname = dnsname.FirstLabel(hostname)
var osv string
if osVersion != nil {
osv = osVersion()
}
return &tailcfg.Hostinfo{
IPNVersion: version.Long,
Hostname: hostname,
OS: version.OS(),
OSVersion: osv,
OSVersion: getOSVersion(),
Package: packageType(),
GoArch: runtime.GOARCH,
DeviceModel: deviceModel(),
}
}
var osVersion func() string // non-nil on some platforms
func getOSVersion() string {
if s, _ := osVersionAtomic.Load().(string); s != "" {
return s
}
if osVersion != nil {
return osVersion()
}
return ""
}
func packageType() string {
switch runtime.GOOS {
case "windows":
@@ -86,11 +92,17 @@ func GetEnvType() EnvType {
return e
}
var deviceModelAtomic atomic.Value // of string
var (
deviceModelAtomic atomic.Value // of string
osVersionAtomic atomic.Value // of string
)
// SetDeviceModel sets the device model for use in Hostinfo updates.
func SetDeviceModel(model string) { deviceModelAtomic.Store(model) }
// SetOSVersion sets the OS version.
func SetOSVersion(v string) { osVersionAtomic.Store(v) }
func deviceModel() string {
s, _ := deviceModelAtomic.Load().(string)
return s