github.com/vmware/govmomi@v0.51.0/cli/vcsa/proxy/proxy.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package net 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "strings" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/cli" 16 "github.com/vmware/govmomi/cli/flags" 17 vnetworking "github.com/vmware/govmomi/vapi/appliance/networking" 18 ) 19 20 type info struct { 21 *flags.ClientFlag 22 *flags.OutputFlag 23 } 24 25 func init() { 26 cli.Register("vcsa.net.proxy.info", &info{}) 27 } 28 29 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 33 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 34 cmd.OutputFlag.Register(ctx, f) 35 } 36 37 func (cmd *info) Process(ctx context.Context) error { 38 if err := cmd.ClientFlag.Process(ctx); err != nil { 39 return err 40 } 41 if err := cmd.OutputFlag.Process(ctx); err != nil { 42 return err 43 } 44 return nil 45 } 46 47 func (cmd *info) Description() string { 48 return `Retrieve the VC networking proxy configuration 49 50 Examples: 51 govc vcsa.net.proxy.info` 52 } 53 54 type proxyResult struct { 55 Proxy *vnetworking.ProxyList `json:"proxy"` 56 NoProxy []string `json:"noProxy"` 57 } 58 59 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 60 c, err := cmd.RestClient() 61 if err != nil { 62 return err 63 } 64 65 fwd := vnetworking.NewManager(c) 66 67 proxyRes, err := fwd.ProxyList(ctx) 68 if err != nil { 69 fmt.Println(err) 70 return nil 71 } 72 73 noProxyRes, err := fwd.NoProxy(ctx) 74 if err != nil { 75 fmt.Println(err) 76 return nil 77 } 78 79 return cmd.WriteResult(&proxyResult{proxyRes, noProxyRes}) 80 } 81 82 func (res proxyResult) Write(w io.Writer) error { 83 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 84 printProxyConfig("HTTP", res.Proxy.Http, tw) 85 printProxyConfig("HTTPS", res.Proxy.Https, tw) 86 printProxyConfig("FTP", res.Proxy.Ftp, tw) 87 fmt.Fprintf(tw, "No Proxy addresses:\t%s\n", strings.Join(res.NoProxy, ", ")) 88 89 return tw.Flush() 90 } 91 92 func printProxyConfig(proxyName string, proxyProtocolConfig vnetworking.Proxy, w io.Writer) { 93 if !proxyProtocolConfig.Enabled { 94 fmt.Fprintf(w, "%s proxy:\tDisabled\n", proxyName) 95 return 96 } 97 98 fmt.Fprintf(w, "%s proxy:\tEnabled\n", proxyName) 99 fmt.Fprintf(w, "\tServer:\t%s\n", proxyProtocolConfig.Server) 100 fmt.Fprintf(w, "\tPort:\t%d\n", proxyProtocolConfig.Port) 101 if proxyProtocolConfig.Username != "" { 102 fmt.Fprintf(w, "\tUsername:\t%s\n", proxyProtocolConfig.Username) 103 } 104 }