From 49d00b6a285325591b861a073f461f2fa5649919 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 20 Jan 2021 18:34:50 -0800 Subject: [PATCH] tailcfg: add StableID to Node. #1178 Signed-off-by: David Anderson --- tailcfg/tailcfg.go | 14 ++++++++++++-- tailcfg/tailcfg_clone.go | 1 + tailcfg/tailcfg_test.go | 27 ++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go index e22c55150..ba948125c 100644 --- a/tailcfg/tailcfg.go +++ b/tailcfg/tailcfg.go @@ -35,6 +35,8 @@ import ( // 10: 2021-01-17: client understands MapResponse.PeerSeenChange const CurrentMapRequestVersion = 10 +type StableID string + type ID int64 type UserID ID @@ -55,6 +57,12 @@ func (u NodeID) IsZero() bool { return u == 0 } +type StableNodeID StableID + +func (u StableNodeID) IsZero() bool { + return u == "" +} + type GroupID ID func (u GroupID) IsZero() bool { @@ -148,8 +156,9 @@ type UserProfile struct { } type Node struct { - ID NodeID - Name string // DNS + ID NodeID + StableID StableNodeID + Name string // DNS // User is the user who created the node. If ACL tags are in // use for the node then it doesn't reflect the ACL identity @@ -785,6 +794,7 @@ func (n *Node) Equal(n2 *Node) bool { } return n != nil && n2 != nil && n.ID == n2.ID && + n.StableID == n2.StableID && n.Name == n2.Name && n.User == n2.User && n.Sharer == n2.Sharer && diff --git a/tailcfg/tailcfg_clone.go b/tailcfg/tailcfg_clone.go index 4105147ad..32e097bc5 100644 --- a/tailcfg/tailcfg_clone.go +++ b/tailcfg/tailcfg_clone.go @@ -62,6 +62,7 @@ func (src *Node) Clone() *Node { // tailscale.com/cmd/cloner -type User,Node,Hostinfo,NetInfo,Group,Role,Capability,Login,DNSConfig,RegisterResponse var _NodeNeedsRegeneration = Node(struct { ID NodeID + StableID StableNodeID Name string User UserID Sharer UserID diff --git a/tailcfg/tailcfg_test.go b/tailcfg/tailcfg_test.go index d720a1f6d..02bc499af 100644 --- a/tailcfg/tailcfg_test.go +++ b/tailcfg/tailcfg_test.go @@ -189,7 +189,7 @@ func TestHostinfoEqual(t *testing.T) { func TestNodeEqual(t *testing.T) { nodeHandles := []string{ - "ID", "Name", "User", "Sharer", + "ID", "StableID", "Name", "User", "Sharer", "Key", "KeyExpiry", "Machine", "DiscoKey", "Addresses", "AllowedIPs", "Endpoints", "DERP", "Hostinfo", "Created", "LastSeen", "KeepAlive", "MachineAuthorized", @@ -229,6 +229,31 @@ func TestNodeEqual(t *testing.T) { &Node{}, true, }, + { + &Node{}, + &Node{}, + true, + }, + { + &Node{ID: 1}, + &Node{}, + false, + }, + { + &Node{ID: 1}, + &Node{ID: 1}, + true, + }, + { + &Node{StableID: "node-abcd"}, + &Node{}, + false, + }, + { + &Node{StableID: "node-abcd"}, + &Node{StableID: "node-abcd"}, + true, + }, { &Node{User: 0}, &Node{User: 1},