diff --git a/README.md b/README.md index 0fe65805..17016974 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Suggestions/PRs welcomed! 8. In the server, register your machine to a namespace with the CLI ```shell - ./headscale -n myfirstnamespace register YOURMACHINEKEY + ./headscale -n myfirstnamespace node register YOURMACHINEKEY ``` ## Configuration reference diff --git a/api.go b/api.go index 721b65ab..f875259c 100644 --- a/api.go +++ b/api.go @@ -43,7 +43,7 @@ func (h *Headscale) RegisterWebAPI(c *gin.Context) {

- headscale register %s + headscale -n NAMESPACE node register %s

diff --git a/cmd/headscale/cli/nodes.go b/cmd/headscale/cli/nodes.go index 1bf4accc..08b7e4d8 100644 --- a/cmd/headscale/cli/nodes.go +++ b/cmd/headscale/cli/nodes.go @@ -35,6 +35,32 @@ var RegisterCmd = &cobra.Command{ }, } +var ListNodesCmd = &cobra.Command{ + Use: "list", + Short: "List the nodes in a given namespace", + Run: func(cmd *cobra.Command, args []string) { + n, err := cmd.Flags().GetString("namespace") + if err != nil { + log.Fatalf("Error getting namespace: %s", err) + } + + h, err := getHeadscaleApp() + if err != nil { + log.Fatalf("Error initializing: %s", err) + } + machines, err := h.ListMachinesInNamespace(n) + if err != nil { + log.Fatalf("Error getting nodes: %s", err) + } + + fmt.Printf("name\t\tlast seen\n") + for _, m := range *machines { + fmt.Printf("%s\t%s\n", m.Name, m.LastSeen.Format("2006-01-02 15:04:05")) + } + + }, +} + var NodeCmd = &cobra.Command{ Use: "node", Short: "Manage the nodes of Headscale", diff --git a/cmd/headscale/headscale.go b/cmd/headscale/headscale.go index e602c37d..476a5431 100644 --- a/cmd/headscale/headscale.go +++ b/cmd/headscale/headscale.go @@ -86,7 +86,6 @@ func main() { headscaleCmd.AddCommand(cli.NamespaceCmd) headscaleCmd.AddCommand(cli.NodeCmd) headscaleCmd.AddCommand(cli.PreauthkeysCmd) - headscaleCmd.AddCommand(cli.RegisterCmd) headscaleCmd.AddCommand(cli.RoutesCmd) headscaleCmd.AddCommand(cli.ServeCmd) headscaleCmd.AddCommand(versionCmd) @@ -103,12 +102,6 @@ func main() { log.Fatalf(err.Error()) } - cli.RegisterCmd.PersistentFlags().StringP("namespace", "n", "", "Namespace") - err = cli.RegisterCmd.MarkPersistentFlagRequired("namespace") - if err != nil { - log.Fatalf(err.Error()) - } - cli.RoutesCmd.PersistentFlags().StringP("namespace", "n", "", "Namespace") err = cli.RoutesCmd.MarkPersistentFlagRequired("namespace") if err != nil { @@ -118,6 +111,9 @@ func main() { cli.NamespaceCmd.AddCommand(cli.CreateNamespaceCmd) cli.NamespaceCmd.AddCommand(cli.ListNamespacesCmd) + cli.NodeCmd.AddCommand(cli.ListNodesCmd) + cli.NodeCmd.AddCommand(cli.RegisterCmd) + cli.RoutesCmd.AddCommand(cli.ListRoutesCmd) cli.RoutesCmd.AddCommand(cli.EnableRouteCmd)