m/c/metroctl: log resolver state

This makes metroctl log the resolver's output, given the --verbose flag
is provided.

Change-Id: If4578341b733b7ba0ae86bc31dac2f841e75e1ad
Reviewed-on: https://review.monogon.dev/c/monogon/+/836
Tested-by: Jenkins CI
Reviewed-by: Sergiusz Bazanski <serge@monogon.tech>
diff --git a/metropolis/cli/metroctl/main.go b/metropolis/cli/metroctl/main.go
index 7c1e050..d616714 100644
--- a/metropolis/cli/metroctl/main.go
+++ b/metropolis/cli/metroctl/main.go
@@ -21,6 +21,9 @@
 	proxyAddr string
 	// configPath overrides the default XDG config path
 	configPath string
+	// verbose, if set, will make this utility log additional runtime
+	// information.
+	verbose bool
 }
 
 var flags metroctlFlags
@@ -29,6 +32,7 @@
 	rootCmd.PersistentFlags().StringArrayVar(&flags.clusterEndpoints, "endpoints", nil, "A list of the target cluster's endpoints.")
 	rootCmd.PersistentFlags().StringVar(&flags.proxyAddr, "proxy", "", "SOCKS5 proxy address")
 	rootCmd.PersistentFlags().StringVar(&flags.configPath, "config", filepath.Join(xdg.ConfigHome, "metroctl"), "An alternative cluster config path")
+	rootCmd.PersistentFlags().BoolVar(&flags.verbose, "verbose", false, "Log additional runtime information")
 }
 
 func main() {
diff --git a/metropolis/cli/metroctl/rpc.go b/metropolis/cli/metroctl/rpc.go
index b307d06..7cb8d7c 100644
--- a/metropolis/cli/metroctl/rpc.go
+++ b/metropolis/cli/metroctl/rpc.go
@@ -6,6 +6,7 @@
 	"crypto/tls"
 	"crypto/x509"
 	"fmt"
+	"log"
 	"net"
 
 	"golang.org/x/net/proxy"
@@ -58,7 +59,15 @@
 		dialOpts = append(dialOpts, grpc.WithTransportCredentials(creds))
 	}
 
-	r := resolver.New(ctx)
+	var resolverOpts []resolver.ResolverOption
+	if flags.verbose {
+		l := func(f string, args ...interface{}) {
+			log.Printf("resolver: " + f, args...)
+		}
+		resolverOpts = append(resolverOpts, resolver.WithLogger(l))
+	}
+	r := resolver.New(ctx, resolverOpts...)
+
 	for _, ep := range clusterEndpoints {
 		r.AddEndpoint(resolver.NodeByHostPort(ep, uint16(node.CuratorServicePort)))
 	}