1
0
mirror of https://github.com/juanfont/headscale.git synced 2024-12-20 19:09:07 +01:00
juanfont.headscale/cmd/headscale/cli/root.go

90 lines
2.1 KiB
Go
Raw Normal View History

2021-07-25 15:10:34 +02:00
package cli
import (
"fmt"
"os"
"runtime"
2021-08-05 19:58:15 +02:00
"github.com/juanfont/headscale"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
2021-08-05 19:58:15 +02:00
"github.com/spf13/cobra"
"github.com/tcnksm/go-latest"
2021-07-25 15:10:34 +02:00
)
var cfgFile string = ""
2021-07-25 15:10:34 +02:00
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().
StringVarP(&cfgFile, "config", "c", "", "config file (default is /etc/headscale/config.yaml)")
2021-11-04 23:45:08 +01:00
rootCmd.PersistentFlags().
2021-11-07 09:58:45 +01:00
StringP("output", "o", "", "Output format. Empty for human-readable, 'json', 'json-line' or 'yaml'")
2021-11-13 09:36:45 +01:00
rootCmd.PersistentFlags().
Bool("force", false, "Disable prompts and forces the execution")
2021-07-25 15:10:34 +02:00
}
func initConfig() {
if cfgFile != "" {
err := headscale.LoadConfig(cfgFile, true)
if err != nil {
log.Fatal().Caller().Err(err)
}
} else {
err := headscale.LoadConfig("", false)
if err != nil {
log.Fatal().Caller().Err(err)
}
}
cfg, err := headscale.GetHeadscaleConfig()
if err != nil {
log.Fatal().Caller().Err(err)
}
machineOutput := HasMachineOutputFlag()
zerolog.SetGlobalLevel(cfg.LogLevel)
// If the user has requested a "machine" readable format,
// then disable login so the output remains valid.
if machineOutput {
zerolog.SetGlobalLevel(zerolog.Disabled)
}
if !cfg.DisableUpdateCheck && !machineOutput {
if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") &&
Version != "dev" {
githubTag := &latest.GithubTag{
Owner: "juanfont",
Repository: "headscale",
}
res, err := latest.Check(githubTag, Version)
if err == nil && res.Outdated {
//nolint
fmt.Printf(
"An updated version of Headscale has been found (%s vs. your current %s). Check it out https://github.com/juanfont/headscale/releases\n",
res.Current,
Version,
)
}
}
}
}
2021-07-25 15:10:34 +02:00
var rootCmd = &cobra.Command{
Use: "headscale",
Short: "headscale - a Tailscale control server",
Long: `
headscale is an open source implementation of the Tailscale control server
2021-08-05 19:58:15 +02:00
https://github.com/juanfont/headscale`,
2021-07-25 15:10:34 +02:00
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}