func (r *infoResult) Write(w io.Writer) error { // Maintain order via r.objects as Property collector does not always return results in order. objects := make(map[types.ManagedObjectReference]mo.VirtualMachine, len(r.VirtualMachines)) for _, o := range r.VirtualMachines { objects[o.Reference()] = o } tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) for _, o := range r.objects { vm := objects[o.Reference()] s := vm.Summary fmt.Fprintf(tw, "Name:\t%s\n", s.Config.Name) if r.cmd.General { hostName := "<unavailable>" if href := vm.Summary.Runtime.Host; href != nil { if name, ok := r.entities[*href]; ok { hostName = name } } fmt.Fprintf(tw, " Path:\t%s\n", o.InventoryPath) fmt.Fprintf(tw, " UUID:\t%s\n", s.Config.Uuid) fmt.Fprintf(tw, " Guest name:\t%s\n", s.Config.GuestFullName) fmt.Fprintf(tw, " Memory:\t%dMB\n", s.Config.MemorySizeMB) fmt.Fprintf(tw, " CPU:\t%d vCPU(s)\n", s.Config.NumCpu) fmt.Fprintf(tw, " Power state:\t%s\n", s.Runtime.PowerState) fmt.Fprintf(tw, " Boot time:\t%s\n", s.Runtime.BootTime) fmt.Fprintf(tw, " IP address:\t%s\n", s.Guest.IpAddress) fmt.Fprintf(tw, " Host:\t%s\n", hostName) } if r.cmd.Resources { if s.Storage == nil { s.Storage = new(types.VirtualMachineStorageSummary) } fmt.Fprintf(tw, " CPU usage:\t%dMHz\n", s.QuickStats.OverallCpuUsage) fmt.Fprintf(tw, " Host memory usage:\t%dMB\n", s.QuickStats.HostMemoryUsage) fmt.Fprintf(tw, " Guest memory usage:\t%dMB\n", s.QuickStats.GuestMemoryUsage) fmt.Fprintf(tw, " Storage uncommitted:\t%s\n", units.ByteSize(s.Storage.Uncommitted)) fmt.Fprintf(tw, " Storage committed:\t%s\n", units.ByteSize(s.Storage.Committed)) fmt.Fprintf(tw, " Storage unshared:\t%s\n", units.ByteSize(s.Storage.Unshared)) fmt.Fprintf(tw, " Storage:\t%s\n", r.entityNames(vm.Datastore)) fmt.Fprintf(tw, " Network:\t%s\n", r.entityNames(vm.Network)) } if r.cmd.ExtraConfig { fmt.Fprintf(tw, " ExtraConfig:\n") for _, v := range vm.Config.ExtraConfig { fmt.Fprintf(tw, " %s:\t%s\n", v.GetOptionValue().Key, v.GetOptionValue().Value) } } } return tw.Flush() }
func (r *infoResult) Write(w io.Writer) error { tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) for _, vm := range r.VirtualMachines { s := vm.Summary fmt.Fprintf(tw, "Name:\t%s\n", s.Config.Name) if r.cmd.General { hostName := "<unavailable>" if href := vm.Summary.Runtime.Host; href != nil { if name, ok := r.entities[*href]; ok { hostName = name } } fmt.Fprintf(tw, " UUID:\t%s\n", s.Config.Uuid) fmt.Fprintf(tw, " Guest name:\t%s\n", s.Config.GuestFullName) fmt.Fprintf(tw, " Memory:\t%dMB\n", s.Config.MemorySizeMB) fmt.Fprintf(tw, " CPU:\t%d vCPU(s)\n", s.Config.NumCpu) fmt.Fprintf(tw, " Power state:\t%s\n", s.Runtime.PowerState) fmt.Fprintf(tw, " Boot time:\t%s\n", s.Runtime.BootTime) fmt.Fprintf(tw, " IP address:\t%s\n", s.Guest.IpAddress) fmt.Fprintf(tw, " Host:\t%s\n", hostName) } if r.cmd.Resources { fmt.Fprintf(tw, " CPU usage:\t%dMHz\n", s.QuickStats.OverallCpuUsage) fmt.Fprintf(tw, " Host memory usage:\t%dMB\n", s.QuickStats.HostMemoryUsage) fmt.Fprintf(tw, " Guest memory usage:\t%dMB\n", s.QuickStats.GuestMemoryUsage) fmt.Fprintf(tw, " Storage uncommitted:\t%s\n", units.ByteSize(s.Storage.Uncommitted)) fmt.Fprintf(tw, " Storage committed:\t%s\n", units.ByteSize(s.Storage.Committed)) fmt.Fprintf(tw, " Storage unshared:\t%s\n", units.ByteSize(s.Storage.Unshared)) fmt.Fprintf(tw, " Storage:\t%s\n", r.entityNames(vm.Datastore)) fmt.Fprintf(tw, " Network:\t%s\n", r.entityNames(vm.Network)) } if r.cmd.ExtraConfig { fmt.Fprintf(tw, " ExtraConfig:\n") for _, v := range vm.Config.ExtraConfig { fmt.Fprintf(tw, " %s:\t%s\n", v.GetOptionValue().Key, v.GetOptionValue().Value) } } } return tw.Flush() }
func (p partitionInfo) Write(w io.Writer) error { tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) fmt.Fprintf(tw, "Table format: %s\n", p.Spec.PartitionFormat) fmt.Fprintf(tw, "Number of sectors: %d\n", p.Spec.TotalSectors) fmt.Fprintf(tw, "\n") fmt.Fprintf(tw, "Number\t") fmt.Fprintf(tw, "Start\t") fmt.Fprintf(tw, "End\t") fmt.Fprintf(tw, "Size\t") fmt.Fprintf(tw, "Type\t") fmt.Fprintf(tw, "\n") for _, e := range p.Spec.Partition { sectors := e.EndSector - e.StartSector fmt.Fprintf(tw, "%d\t", e.Partition) fmt.Fprintf(tw, "%d\t", e.StartSector) fmt.Fprintf(tw, "%d\t", e.EndSector) fmt.Fprintf(tw, "%s\t", units.ByteSize(sectors*512)) fmt.Fprintf(tw, "%s\t", e.Type) fmt.Fprintf(tw, "\n") } return tw.Flush() }
func (o *listOutput) Write(w io.Writer) error { // Only include path header if we're dealing with more than one path. includeHeader := false if o.hasMultiplePaths() { includeHeader = true } tw := tabwriter.NewWriter(w, 3, 0, 2, ' ', 0) for i, r := range o.rs { if includeHeader { if i > 0 { fmt.Fprintf(tw, "\n") } fmt.Fprintf(tw, "%s:\n", r.FolderPath) } for _, file := range r.File { info := file.GetFileInfo() if o.cmd.long { fmt.Fprintf(tw, "%s\t%s\t%s\n", units.ByteSize(info.FileSize), info.Modification.Format("Mon Jan 2 15:04:05 2006"), info.Path) } else { fmt.Fprintf(tw, "%s\n", info.Path) } } } tw.Flush() return nil }
func (r lunResult) Write(w io.Writer) error { tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) fmt.Fprintf(tw, "Name\t") fmt.Fprintf(tw, "Type\t") fmt.Fprintf(tw, "Capacity\t") fmt.Fprintf(tw, "Model\t") fmt.Fprintf(tw, "\n") for _, e := range r.StorageDeviceInfo.ScsiLun { var capacity int64 lun := e.GetScsiLun() if disk, ok := e.(*types.HostScsiDisk); ok { capacity = int64(disk.Capacity.Block) * int64(disk.Capacity.BlockSize) } fmt.Fprintf(tw, "%s\t", lun.DeviceName) fmt.Fprintf(tw, "%s\t", lun.DeviceType) if capacity == 0 { fmt.Fprintf(tw, "-\t") } else { fmt.Fprintf(tw, "%s\t", units.ByteSize(capacity)) } fmt.Fprintf(tw, "%s\t", lun.Model) fmt.Fprintf(tw, "\n") } return tw.Flush() }
func (r lunResult) Write(w io.Writer) error { tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) fmt.Fprintf(tw, "Name\t") fmt.Fprintf(tw, "Type\t") fmt.Fprintf(tw, "Capacity\t") fmt.Fprintf(tw, "Model\t") fmt.Fprintf(tw, "\n") for _, e := range r.StorageDeviceInfo.ScsiLun { var tags []string var capacity int64 lun := e.GetScsiLun() if disk, ok := e.(*types.HostScsiDisk); ok { capacity = int64(disk.Capacity.Block) * int64(disk.Capacity.BlockSize) if disk.LocalDisk != nil && *disk.LocalDisk { tags = append(tags, "local") } if disk.Ssd != nil && *disk.Ssd { tags = append(tags, "ssd") } } fmt.Fprintf(tw, "%s\t", lun.DeviceName) fmt.Fprintf(tw, "%s\t", lun.DeviceType) if capacity == 0 { fmt.Fprintf(tw, "-\t") } else { fmt.Fprintf(tw, "%s\t", units.ByteSize(capacity)) } fmt.Fprintf(tw, "%s", lun.Model) if len(tags) > 0 { fmt.Fprintf(tw, " (%s)", strings.Join(tags, ",")) } fmt.Fprintf(tw, "\n") } return tw.Flush() }
func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() flag.Parse() // Parse URL from string u, err := url.Parse(*urlFlag) if err != nil { exit(err) } // Override username and/or password as required processOverride(u) // Connect and log in to ESX or vCenter c, err := govmomi.NewClient(ctx, u, *insecureFlag) if err != nil { exit(err) } f := find.NewFinder(c.Client, true) // Find one and only datacenter dc, err := f.DefaultDatacenter(ctx) if err != nil { exit(err) } // Make future calls local to this datacenter f.SetDatacenter(dc) // Find datastores in datacenter dss, err := f.DatastoreList(ctx, "*") if err != nil { exit(err) } pc := property.DefaultCollector(c.Client) // Convert datastores into list of references var refs []types.ManagedObjectReference for _, ds := range dss { refs = append(refs, ds.Reference()) } // Retrieve summary property for all datastores var dst []mo.Datastore err = pc.Retrieve(ctx, refs, []string{"summary"}, &dst) if err != nil { exit(err) } // Print summary per datastore tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) fmt.Fprintf(tw, "Name:\tType:\tCapacity:\tFree:\n") for _, ds := range dst { fmt.Fprintf(tw, "%s\t", ds.Summary.Name) fmt.Fprintf(tw, "%s\t", ds.Summary.Type) fmt.Fprintf(tw, "%s\t", units.ByteSize(ds.Summary.Capacity)) fmt.Fprintf(tw, "%s\t", units.ByteSize(ds.Summary.FreeSpace)) fmt.Fprintf(tw, "\n") } tw.Flush() }