From 49c206fe1e583ea676ec80896ceb54efdea52000 Mon Sep 17 00:00:00 2001 From: Maisem Ali Date: Mon, 27 Feb 2023 09:58:54 -0800 Subject: [PATCH] tailcfg,hostinfo: add App field to identify tsnet uses This allows us to differentiate between the various tsnet apps that we have like `golinks` and `k8s-operator`. Signed-off-by: Maisem Ali --- cmd/k8s-operator/operator.go | 4 ++-- hostinfo/hostinfo.go | 14 ++++++++++++++ tailcfg/tailcfg.go | 3 +++ tailcfg/tailcfg_clone.go | 1 + tailcfg/tailcfg_test.go | 11 +++++++++++ tailcfg/tailcfg_view.go | 2 ++ 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/cmd/k8s-operator/operator.go b/cmd/k8s-operator/operator.go index 5d81d84fb..4b56f7d70 100644 --- a/cmd/k8s-operator/operator.go +++ b/cmd/k8s-operator/operator.go @@ -99,9 +99,9 @@ func main() { tsClient.HTTPClient = credentials.Client(context.Background()) if shouldRunAuthProxy { - hostinfo.SetPackage("k8s-operator-proxy") + hostinfo.SetApp("k8s-operator-proxy") } else { - hostinfo.SetPackage("k8s-operator") + hostinfo.SetApp("k8s-operator") } s := &tsnet.Server{ diff --git a/hostinfo/hostinfo.go b/hostinfo/hostinfo.go index e258ad2bf..7994c90fd 100644 --- a/hostinfo/hostinfo.go +++ b/hostinfo/hostinfo.go @@ -36,6 +36,7 @@ func New() *tailcfg.Hostinfo { return &tailcfg.Hostinfo{ IPNVersion: version.Long(), Hostname: hostname, + App: appTypeCached(), OS: version.OS(), OSVersion: GetOSVersion(), Container: lazyInContainer.Get(), @@ -112,6 +113,13 @@ func GetOSVersion() string { return "" } +func appTypeCached() string { + if v, ok := appType.Load().(string); ok { + return v + } + return "" +} + func packageTypeCached() string { if v, _ := packagingType.Load().(string); v != "" { return v @@ -159,6 +167,7 @@ var ( osVersionAtomic atomic.Value // of string desktopAtomic atomic.Value // of opt.Bool packagingType atomic.Value // of string + appType atomic.Value // of string ) // SetPushDeviceToken sets the device token for use in Hostinfo updates. @@ -176,6 +185,11 @@ func SetOSVersion(v string) { osVersionAtomic.Store(v) } // F-Droid build) and tsnet (set to "tsnet"). func SetPackage(v string) { packagingType.Store(v) } +// SetApp sets the app type for the app. +// It is used by tsnet to specify what app is using it such as "golinks" +// and "k8s-operator". +func SetApp(v string) { appType.Store(v) } + func deviceModel() string { s, _ := deviceModelAtomic.Load().(string) return s diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go index 5f47a8502..c273a876f 100644 --- a/tailcfg/tailcfg.go +++ b/tailcfg/tailcfg.go @@ -522,6 +522,9 @@ type Hostinfo struct { DistroVersion string `json:",omitempty"` // "20.04", ... DistroCodeName string `json:",omitempty"` // "jammy", "bullseye", ... + // App is used to disambiguate Tailscale clients that run using tsnet. + App string `json:",omitempty"` // "k8s-operator", "golinks", ... + Desktop opt.Bool `json:",omitempty"` // if a desktop was detected on Linux Package string `json:",omitempty"` // Tailscale package to disambiguate ("choco", "appstore", etc; "" for unknown) DeviceModel string `json:",omitempty"` // mobile phone model ("Pixel 3a", "iPhone12,3") diff --git a/tailcfg/tailcfg_clone.go b/tailcfg/tailcfg_clone.go index b1bef1d68..3d40a0a18 100644 --- a/tailcfg/tailcfg_clone.go +++ b/tailcfg/tailcfg_clone.go @@ -128,6 +128,7 @@ var _HostinfoCloneNeedsRegeneration = Hostinfo(struct { Distro string DistroVersion string DistroCodeName string + App string Desktop opt.Bool Package string DeviceModel string diff --git a/tailcfg/tailcfg_test.go b/tailcfg/tailcfg_test.go index a07557125..43c1a4bc3 100644 --- a/tailcfg/tailcfg_test.go +++ b/tailcfg/tailcfg_test.go @@ -41,6 +41,7 @@ func TestHostinfoEqual(t *testing.T) { "Distro", "DistroVersion", "DistroCodeName", + "App", "Desktop", "Package", "DeviceModel", @@ -216,6 +217,16 @@ func TestHostinfoEqual(t *testing.T) { &Hostinfo{}, false, }, + { + &Hostinfo{App: "golink"}, + &Hostinfo{App: "abc"}, + false, + }, + { + &Hostinfo{App: "golink"}, + &Hostinfo{App: "golink"}, + true, + }, } for i, tt := range tests { got := tt.a.Equal(tt.b) diff --git a/tailcfg/tailcfg_view.go b/tailcfg/tailcfg_view.go index dfd48f2bc..a1cc39464 100644 --- a/tailcfg/tailcfg_view.go +++ b/tailcfg/tailcfg_view.go @@ -267,6 +267,7 @@ func (v HostinfoView) Env() string { return v.ж.Env } func (v HostinfoView) Distro() string { return v.ж.Distro } func (v HostinfoView) DistroVersion() string { return v.ж.DistroVersion } func (v HostinfoView) DistroCodeName() string { return v.ж.DistroCodeName } +func (v HostinfoView) App() string { return v.ж.App } func (v HostinfoView) Desktop() opt.Bool { return v.ж.Desktop } func (v HostinfoView) Package() string { return v.ж.Package } func (v HostinfoView) DeviceModel() string { return v.ж.DeviceModel } @@ -305,6 +306,7 @@ var _HostinfoViewNeedsRegeneration = Hostinfo(struct { Distro string DistroVersion string DistroCodeName string + App string Desktop opt.Bool Package string DeviceModel string