diff --git a/cmd/headscale/cli/nodes.go b/cmd/headscale/cli/nodes.go index 143e5a4c..7a6b818a 100644 --- a/cmd/headscale/cli/nodes.go +++ b/cmd/headscale/cli/nodes.go @@ -48,23 +48,14 @@ func init() { nodeCmd.AddCommand(deleteNodeCmd) nodeCmd.AddCommand(tagCmd) - addTagCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)") - err = addTagCmd.MarkFlagRequired("identifier") + setTagCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)") + err = setTagCmd.MarkFlagRequired("identifier") if err != nil { log.Fatalf(err.Error()) } - addTagCmd.Flags(). + setTagCmd.Flags(). StringSliceP("tags", "t", []string{}, "List of tags to add to the node") - tagCmd.AddCommand(addTagCmd) - - delTagCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)") - err = delTagCmd.MarkFlagRequired("identifier") - if err != nil { - log.Fatalf(err.Error()) - } - delTagCmd.Flags(). - StringSliceP("tags", "t", []string{}, "List of tags to remove from the node") - tagCmd.AddCommand(delTagCmd) + tagCmd.AddCommand(setTagCmd) } var nodeCmd = &cobra.Command{ @@ -425,9 +416,9 @@ var tagCmd = &cobra.Command{ Aliases: []string{"t", "tag"}, } -var addTagCmd = &cobra.Command{ - Use: "add", - Short: "Add tags to a node in your network", +var setTagCmd = &cobra.Command{ + Use: "set", + Short: "set tags to a node in your network", Run: func(cmd *cobra.Command, args []string) { output, _ := cmd.Flags().GetString("output") ctx, client, conn, cancel := getHeadscaleCLIClient() @@ -445,7 +436,7 @@ var addTagCmd = &cobra.Command{ return } - tagsToAdd, err := cmd.Flags().GetStringSlice("tags") + tagsToSet, err := cmd.Flags().GetStringSlice("tags") if err != nil { ErrorOutput( err, @@ -456,129 +447,23 @@ var addTagCmd = &cobra.Command{ return } - // retrieve machine informations - request := &v1.GetMachineRequest{ + // Sending tags to machine + request := &v1.SetTagsRequest{ MachineId: identifier, + Tags: tagsToSet, } - resp, err := client.GetMachine(ctx, request) + resp, err := client.SetTags(ctx, request) if err != nil { ErrorOutput( err, - fmt.Sprintf("Error retrieving machine: %s", err), + fmt.Sprintf("Error while sending tags to headscale: %s", err), output, ) } - // update machine - mergedTags := resp.Machine.GetForcedTags() - for _, tag := range tagsToAdd { - if !containsString(mergedTags, tag) { - mergedTags = append(mergedTags, tag) - } - } - - machine := resp.GetMachine() - machine.ForcedTags = mergedTags - - updateReq := &v1.UpdateMachineRequest{ - Machine: machine, - } - - // send updated machine upstream - updateResponse, err := client.UpdateMachine(ctx, updateReq) - if err != nil { - ErrorOutput( - err, - fmt.Sprintf("Error while updating machine: %s", err), - output, - ) - } - - if updateResponse != nil { + if resp != nil { SuccessOutput( - updateResponse.GetMachine(), - "Machine updated", - output, - ) - } - }, -} - -var delTagCmd = &cobra.Command{ - Use: "del", - Short: "remove tags to a node in your network", - Aliases: []string{"remove", "rm"}, - Run: func(cmd *cobra.Command, args []string) { - output, _ := cmd.Flags().GetString("output") - ctx, client, conn, cancel := getHeadscaleCLIClient() - defer cancel() - defer conn.Close() - - // retrieve flags from CLI - identifier, err := cmd.Flags().GetUint64("identifier") - if err != nil { - ErrorOutput( - err, - fmt.Sprintf("Error converting ID to integer: %s", err), - output, - ) - - return - } - tagsToRemove, err := cmd.Flags().GetStringSlice("tags") - if err != nil { - ErrorOutput( - err, - fmt.Sprintf("Error retrieving list of tags to add to machine: %v", err), - output, - ) - - return - } - - // retrieve machine informations - request := &v1.GetMachineRequest{ - MachineId: identifier, - } - resp, err := client.GetMachine(ctx, request) - if err != nil { - ErrorOutput( - err, - fmt.Sprintf("Error retrieving machine: %s", err), - output, - ) - } - - // update machine - keepTags := resp.Machine.GetForcedTags() - for _, tag := range tagsToRemove { - for i, t := range keepTags { - if t == tag { - keepTags = append(keepTags[:i], keepTags[i+1:]...) - } - } - } - - machine := resp.GetMachine() - machine.ForcedTags = keepTags - - updateReq := &v1.UpdateMachineRequest{ - Machine: machine, - } - - // send updated machine upstream - updateResponse, err := client.UpdateMachine(ctx, updateReq) - if err != nil { - ErrorOutput( - err, - fmt.Sprintf("Error while updating machine: %s", err), - output, - ) - } - - if updateResponse != nil { - SuccessOutput( - updateResponse.GetMachine(), + resp.GetMachine(), "Machine updated", output, )