From 3f4319cdf7460876b8fea55b6965b01104b905a3 Mon Sep 17 00:00:00 2001 From: Ryan Uber Date: Thu, 10 Sep 2015 23:05:59 -0700 Subject: [PATCH] command: add helpers --- command/helpers.go | 38 +++++++++++++++++++++++++++++++++++ command/helpers_test.go | 44 +++++++++++++++++++++++++++++++++++++++++ commands.go | 6 ++++++ 3 files changed, 88 insertions(+) create mode 100644 command/helpers.go create mode 100644 command/helpers_test.go diff --git a/command/helpers.go b/command/helpers.go new file mode 100644 index 000000000..1190c05e7 --- /dev/null +++ b/command/helpers.go @@ -0,0 +1,38 @@ +package command + +import ( + "flag" + "os" + + "github.com/hashicorp/nomad/api" +) + +const ( + // Environment variable used to control the HTTP address + // we connect to while using various commands. This may + // be overridden using the -http-addr flag. + HttpEnvVar = "NOMAD_HTTP_ADDR" + + // DefaultHTTPAddr is the default address used for the + // HTTP address flag. + DefaultHttpAddr = "http://127.0.0.1:4646" +) + +// HttpAddrFlag is used to add the -http-addr flag to a flag +// set. Allows setting the value from an environment variable. +func HttpAddrFlag(f *flag.FlagSet) *string { + defaultAddr := os.Getenv(HttpEnvVar) + if defaultAddr == "" { + defaultAddr = DefaultHttpAddr + } + return f.String("http-addr", defaultAddr, + "HTTP address of the Nomad agent") +} + +// HttpClient is used to get a new Nomad client using the +// given address. +func HttpClient(addr string) (*api.Client, error) { + conf := api.DefaultConfig() + conf.URL = addr + return api.NewClient(conf) +} diff --git a/command/helpers_test.go b/command/helpers_test.go new file mode 100644 index 000000000..898470437 --- /dev/null +++ b/command/helpers_test.go @@ -0,0 +1,44 @@ +package command + +import ( + "flag" + "os" + "testing" +) + +func TestHelpers_HttpAddrFlag(t *testing.T) { + var addr *string + + // Returns the default + flags := flag.NewFlagSet("test", flag.ContinueOnError) + addr = HttpAddrFlag(flags) + if err := flags.Parse([]string{}); err != nil { + t.Fatalf("err: %s", err) + } + if *addr != DefaultHttpAddr { + t.Fatalf("expect %q, got: %q", DefaultHttpAddr, *addr) + } + + // Returns from the env var + if err := os.Setenv(HttpEnvVar, "http://127.0.0.1:1111"); err != nil { + t.Fatalf("err: %s", err) + } + flags = flag.NewFlagSet("test", flag.ContinueOnError) + addr = HttpAddrFlag(flags) + if err := flags.Parse([]string{}); err != nil { + t.Fatalf("err: %s", err) + } + if *addr != "http://127.0.0.1:1111" { + t.Fatalf("expect %q, got: %q", "http://127.0.0.1:1111", *addr) + } + + // Returns from flag + flags = flag.NewFlagSet("test", flag.ContinueOnError) + addr = HttpAddrFlag(flags) + if err := flags.Parse([]string{"-http-addr", "http://127.0.0.1:2222"}); err != nil { + t.Fatalf("err: %s", err) + } + if *addr != "http://127.0.0.1:2222" { + t.Fatalf("expect %q, got: %q", "http://127.0.0.1:2222", *addr) + } +} diff --git a/commands.go b/commands.go index 5e47abb1c..a94e0ba2b 100644 --- a/commands.go +++ b/commands.go @@ -34,6 +34,12 @@ func Commands(metaPtr *command.Meta) map[string]cli.CommandFactory { }, nil }, + "status": func() (cli.Command, error) { + return &command.StatusCommand{ + Ui: meta.Ui, + }, nil + }, + "version": func() (cli.Command, error) { ver := Version rel := VersionPrerelease