github.com/vmware/govmomi@v0.51.0/cli/host/storage/mark.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 storage 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/object" 15 "github.com/vmware/govmomi/vim25/mo" 16 "github.com/vmware/govmomi/vim25/types" 17 ) 18 19 type mark struct { 20 *flags.HostSystemFlag 21 22 ssd *bool 23 local *bool 24 } 25 26 func init() { 27 cli.Register("host.storage.mark", &mark{}) 28 } 29 30 func (cmd *mark) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 32 cmd.HostSystemFlag.Register(ctx, f) 33 34 f.Var(flags.NewOptionalBool(&cmd.ssd), "ssd", "Mark as SSD") 35 f.Var(flags.NewOptionalBool(&cmd.local), "local", "Mark as local") 36 } 37 38 func (cmd *mark) Process(ctx context.Context) error { 39 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 40 return err 41 } 42 return nil 43 } 44 45 func (cmd *mark) Usage() string { 46 return "DEVICE_PATH" 47 } 48 49 func (cmd *mark) Description() string { 50 return `Mark device at DEVICE_PATH.` 51 } 52 53 func (cmd *mark) Mark(ctx context.Context, ss *object.HostStorageSystem, uuid string) error { 54 var err error 55 var task *object.Task 56 57 if cmd.ssd != nil { 58 if *cmd.ssd { 59 task, err = ss.MarkAsSsd(ctx, uuid) 60 } else { 61 task, err = ss.MarkAsNonSsd(ctx, uuid) 62 } 63 64 if err != nil { 65 return err 66 } 67 68 err = task.Wait(ctx) 69 if err != nil { 70 return err 71 } 72 } 73 74 if cmd.local != nil { 75 if *cmd.local { 76 task, err = ss.MarkAsLocal(ctx, uuid) 77 } else { 78 task, err = ss.MarkAsNonLocal(ctx, uuid) 79 } 80 81 if err != nil { 82 return err 83 } 84 85 err = task.Wait(ctx) 86 if err != nil { 87 return err 88 } 89 } 90 91 return nil 92 } 93 94 func (cmd *mark) Run(ctx context.Context, f *flag.FlagSet) error { 95 if f.NArg() != 1 { 96 return fmt.Errorf("specify device path") 97 } 98 99 path := f.Args()[0] 100 101 host, err := cmd.HostSystem() 102 if err != nil { 103 return err 104 } 105 106 ss, err := host.ConfigManager().StorageSystem(ctx) 107 if err != nil { 108 return err 109 } 110 111 var hss mo.HostStorageSystem 112 err = ss.Properties(ctx, ss.Reference(), nil, &hss) 113 if err != nil { 114 return nil 115 } 116 117 for _, e := range hss.StorageDeviceInfo.ScsiLun { 118 disk, ok := e.(*types.HostScsiDisk) 119 if !ok { 120 continue 121 } 122 123 if disk.DevicePath == path { 124 return cmd.Mark(ctx, ss, disk.Uuid) 125 } 126 } 127 128 return fmt.Errorf("%s not found", path) 129 }