Skip to content

Commit 6b6509e

Browse files
authored
notify nodes after owner change (#2543)
* proto: user id as identifier for move node Signed-off-by: Kristoffer Dalby <[email protected]> * gen: regenr Signed-off-by: Kristoffer Dalby <[email protected]> * grpc: move, use userid, one tx, send update Updates #2467 Signed-off-by: Kristoffer Dalby <[email protected]> * integration: update move cli tests Signed-off-by: Kristoffer Dalby <[email protected]> --------- Signed-off-by: Kristoffer Dalby <[email protected]>
1 parent cfe9bbf commit 6b6509e

File tree

6 files changed

+36
-23
lines changed

6 files changed

+36
-23
lines changed

cmd/headscale/cli/nodes.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func init() {
7878
log.Fatal(err.Error())
7979
}
8080

81-
moveNodeCmd.Flags().StringP("user", "u", "", "New user")
81+
moveNodeCmd.Flags().Uint64P("user", "u", 0, "New user")
8282

8383
moveNodeCmd.Flags().StringP("namespace", "n", "", "User")
8484
moveNodeNamespaceFlag := moveNodeCmd.Flags().Lookup("namespace")
@@ -470,7 +470,7 @@ var moveNodeCmd = &cobra.Command{
470470
return
471471
}
472472

473-
user, err := cmd.Flags().GetString("user")
473+
user, err := cmd.Flags().GetUint64("user")
474474
if err != nil {
475475
ErrorOutput(
476476
err,

gen/go/headscale/v1/node.pb.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen/openapiv2/headscale/v1/headscale.swagger.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,8 @@
800800
"type": "object",
801801
"properties": {
802802
"user": {
803-
"type": "string"
803+
"type": "string",
804+
"format": "uint64"
804805
}
805806
}
806807
},

hscontrol/grpcv1.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -547,22 +547,31 @@ func (api headscaleV1APIServer) MoveNode(
547547
ctx context.Context,
548548
request *v1.MoveNodeRequest,
549549
) (*v1.MoveNodeResponse, error) {
550-
// TODO(kradalby): This should be done in one tx.
551-
node, err := api.h.db.GetNodeByID(types.NodeID(request.GetNodeId()))
552-
if err != nil {
553-
return nil, err
554-
}
550+
node, err := db.Write(api.h.db.DB, func(tx *gorm.DB) (*types.Node, error) {
551+
node, err := db.GetNodeByID(tx, types.NodeID(request.GetNodeId()))
552+
if err != nil {
553+
return nil, err
554+
}
555555

556-
user, err := api.h.db.GetUserByName(request.GetUser())
557-
if err != nil {
558-
return nil, err
559-
}
556+
err = db.AssignNodeToUser(tx, node, types.UserID(request.GetUser()))
557+
if err != nil {
558+
return nil, err
559+
}
560560

561-
err = api.h.db.AssignNodeToUser(node, types.UserID(user.ID))
561+
return node, nil
562+
})
562563
if err != nil {
563564
return nil, err
564565
}
565566

567+
ctx = types.NotifyCtx(ctx, "cli-movenode-self", node.Hostname)
568+
api.h.nodeNotifier.NotifyByNodeID(
569+
ctx,
570+
types.UpdateSelf(node.ID),
571+
node.ID)
572+
ctx = types.NotifyCtx(ctx, "cli-movenode", node.Hostname)
573+
api.h.nodeNotifier.NotifyWithIgnore(ctx, types.UpdatePeerChanged(node.ID), node.ID)
574+
566575
return &v1.MoveNodeResponse{Node: node.Proto()}, nil
567576
}
568577

integration/cli_test.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,9 @@ func TestNodeMoveCommand(t *testing.T) {
15801580
// Randomly generated node key
15811581
regID := types.MustRegistrationID()
15821582

1583+
userMap, err := headscale.MapUsers()
1584+
assertNoErr(t, err)
1585+
15831586
_, err = headscale.Execute(
15841587
[]string{
15851588
"headscale",
@@ -1628,9 +1631,9 @@ func TestNodeMoveCommand(t *testing.T) {
16281631
"nodes",
16291632
"move",
16301633
"--identifier",
1631-
nodeID,
1634+
strconv.FormatUint(node.GetId(), 10),
16321635
"--user",
1633-
"new-user",
1636+
strconv.FormatUint(userMap["new-user"].GetId(), 10),
16341637
"--output",
16351638
"json",
16361639
},
@@ -1668,7 +1671,7 @@ func TestNodeMoveCommand(t *testing.T) {
16681671
"--identifier",
16691672
nodeID,
16701673
"--user",
1671-
"non-existing-user",
1674+
"999",
16721675
"--output",
16731676
"json",
16741677
},
@@ -1689,7 +1692,7 @@ func TestNodeMoveCommand(t *testing.T) {
16891692
"--identifier",
16901693
nodeID,
16911694
"--user",
1692-
"old-user",
1695+
strconv.FormatUint(userMap["old-user"].GetId(), 10),
16931696
"--output",
16941697
"json",
16951698
},
@@ -1708,7 +1711,7 @@ func TestNodeMoveCommand(t *testing.T) {
17081711
"--identifier",
17091712
nodeID,
17101713
"--user",
1711-
"old-user",
1714+
strconv.FormatUint(userMap["old-user"].GetId(), 10),
17121715
"--output",
17131716
"json",
17141717
},

proto/headscale/v1/node.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ message ListNodesResponse { repeated Node nodes = 1; }
9999

100100
message MoveNodeRequest {
101101
uint64 node_id = 1;
102-
string user = 2;
102+
uint64 user = 2;
103103
}
104104

105105
message MoveNodeResponse { Node node = 1; }

0 commit comments

Comments
 (0)