From 03dc4e63faa07410c923ce0b6e7910c0f708cb6a Mon Sep 17 00:00:00 2001 From: Ed <edward.welch@grafana.com> Date: Thu, 18 Jul 2019 14:16:30 -0400 Subject: [PATCH] Parse the addr into a URL so we can extract the Host name for use in the TLSConfig (#778) --- cmd/logcli/client.go | 10 ++++++---- cmd/logcli/main.go | 29 ++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/cmd/logcli/client.go b/cmd/logcli/client.go index ed4bd3d9..257fd027 100644 --- a/cmd/logcli/client.go +++ b/cmd/logcli/client.go @@ -54,7 +54,8 @@ func listLabelValues(name string) (*logproto.LabelResponse, error) { } func doRequest(path string, out interface{}) error { - url := *addr + path + addrURL.Path = path + url := addrURL.String() if !*quiet { log.Print(url) } @@ -71,7 +72,7 @@ func doRequest(path string, out interface{}) error { CAFile: *tlsCACertPath, CertFile: *tlsClientCertPath, KeyFile: *tlsClientCertKeyPath, - ServerName: url, + ServerName: addrURL.Host, InsecureSkipVerify: *tlsSkipVerify, }, } @@ -110,14 +111,15 @@ func wsConnect(path string) (*websocket.Conn, error) { CAFile: *tlsCACertPath, CertFile: *tlsClientCertPath, KeyFile: *tlsClientCertKeyPath, - ServerName: *addr, + ServerName: addrURL.Host, InsecureSkipVerify: *tlsSkipVerify, }) if err != nil { return nil, err } - url := *addr + path + addrURL.Path = path + url := addrURL.String() if strings.HasPrefix(url, "https") { url = strings.Replace(url, "https", "wss", 1) } else if strings.HasPrefix(url, "http") { diff --git a/cmd/logcli/main.go b/cmd/logcli/main.go index 10eff49b..86cb8bcf 100644 --- a/cmd/logcli/main.go +++ b/cmd/logcli/main.go @@ -2,9 +2,10 @@ package main import ( "log" + "net/url" "os" - kingpin "gopkg.in/alecthomas/kingpin.v2" + "gopkg.in/alecthomas/kingpin.v2" ) var ( @@ -12,7 +13,9 @@ var ( quiet = app.Flag("quiet", "suppress everything but log lines").Default("false").Short('q').Bool() outputMode = app.Flag("output", "specify output mode [default, raw, jsonl]").Default("default").Short('o').Enum("default", "raw", "jsonl") - addr = app.Flag("addr", "Server address.").Default("https://logs-us-west1.grafana.net").Envar("GRAFANA_ADDR").String() + addr = app.Flag("addr", "Server address.").Default("https://logs-us-west1.grafana.net").Envar("GRAFANA_ADDR").String() + addrURL url.URL + username = app.Flag("username", "Username for HTTP basic auth.").Default("").Envar("GRAFANA_USERNAME").String() password = app.Flag("password", "Password for HTTP basic auth.").Default("").Envar("GRAFANA_PASSWORD").String() @@ -35,19 +38,27 @@ var ( ignoreLabelsKey = queryCmd.Flag("exclude-label", "Exclude labels given the provided key during output.").Strings() showLabelsKey = queryCmd.Flag("include-label", "Include labels given the provided key during output.").Strings() fixedLabelsLen = queryCmd.Flag("labels-length", "Set a fixed padding to labels").Default("0").Int() - - labelsCmd = app.Command("labels", "Find values for a given label.") - labelName = labelsCmd.Arg("label", "The name of the label.").HintAction(listLabels).String() + labelsCmd = app.Command("labels", "Find values for a given label.") + labelName = labelsCmd.Arg("label", "The name of the label.").HintAction(listLabels).String() ) func main() { log.SetOutput(os.Stderr) - switch kingpin.MustParse(app.Parse(os.Args[1:])) { + cmd := kingpin.MustParse(app.Parse(os.Args[1:])) + + if *addr == "" { + log.Fatalln("Server address cannot be empty") + } + + u, err := url.Parse(*addr) + if err != nil { + log.Fatalf("Failed to parse addr into URL: %v", err) + } + addrURL = *u + + switch cmd { case queryCmd.FullCommand(): - if *addr == "" { - log.Fatalln("Server address cannot be empty") - } doQuery() case labelsCmd.FullCommand(): doLabels() -- GitLab