github.com/vmware/govmomi@v0.51.0/cli/namespace/info.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 namespace 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "strings" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/find" 16 "github.com/vmware/govmomi/vapi/library" 17 "github.com/vmware/govmomi/vapi/namespace" 18 "github.com/vmware/govmomi/vim25/types" 19 20 "github.com/vmware/govmomi/cli" 21 "github.com/vmware/govmomi/cli/flags" 22 ) 23 24 type infoResult struct { 25 namespace.NamespacesInstanceInfo 26 27 ctx context.Context 28 cmd *info 29 } 30 31 func (r infoResult) Write(w io.Writer) error { 32 c, err := r.cmd.Client() 33 if err != nil { 34 return err 35 } 36 37 rc, err := r.cmd.RestClient() 38 if err != nil { 39 return err 40 } 41 l := library.NewManager(rc) 42 43 pc, err := r.cmd.PbmClient() 44 if err != nil { 45 return err 46 } 47 48 var ids []string 49 for _, s := range r.StorageSpecs { 50 ids = append(ids, s.Policy) 51 } 52 m, err := pc.ProfileMap(r.ctx, ids...) 53 if err != nil { 54 return err 55 } 56 57 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 58 59 cluster := types.ManagedObjectReference{Type: "ClusterComputeResource", Value: r.ClusterId} 60 path, err := find.InventoryPath(r.ctx, c, cluster) 61 if err != nil { 62 return err 63 } 64 65 fmt.Fprintf(tw, "Cluster:\t%s\n", path) 66 fmt.Fprintf(tw, "Status:\t%s\n", r.ConfigStatus) 67 fmt.Fprintf(tw, "VM Classes:\t%s\n", strings.Join(r.VmServiceSpec.VmClasses, ",")) 68 69 for _, s := range r.VmServiceSpec.ContentLibraries { 70 info, err := l.GetLibraryByID(r.ctx, s) 71 if err != nil { 72 return err 73 } 74 fmt.Fprintf(tw, "Content Library:\t%s\n", info.Name) 75 } 76 77 for _, s := range r.StorageSpecs { 78 fmt.Fprintf(tw, "Storage Policy:\t%s\n", m.Name[s.Policy].GetPbmProfile().Name) 79 } 80 81 return tw.Flush() 82 } 83 84 type info struct { 85 *flags.ClientFlag 86 *flags.OutputFlag 87 } 88 89 func init() { 90 cli.Register("namespace.info", &info{}) 91 } 92 93 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 94 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 95 cmd.ClientFlag.Register(ctx, f) 96 97 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 98 cmd.OutputFlag.Register(ctx, f) 99 } 100 101 func (cmd *info) Process(ctx context.Context) error { 102 if err := cmd.ClientFlag.Process(ctx); err != nil { 103 return err 104 } 105 if err := cmd.OutputFlag.Process(ctx); err != nil { 106 return err 107 } 108 109 return nil 110 } 111 112 func (cmd *info) Usage() string { 113 return "NAME" 114 } 115 116 func (cmd *info) Description() string { 117 return `Displays the details of a vSphere Namespace. 118 119 Examples: 120 govc namespace.info test-namespace` 121 } 122 123 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 124 if f.NArg() != 1 { 125 return flag.ErrHelp 126 } 127 128 rc, err := cmd.RestClient() 129 if err != nil { 130 return err 131 } 132 133 nm := namespace.NewManager(rc) 134 135 d, err := nm.GetNamespace(ctx, f.Arg(0)) 136 if err != nil { 137 return err 138 } 139 140 return cmd.WriteResult(&infoResult{d, ctx, cmd}) 141 }