github.com/vmware/govmomi@v0.43.0/govc/host/storage/mark.go (about) 1 /* 2 Copyright (c) 2016 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package storage 18 19 import ( 20 "context" 21 "flag" 22 "fmt" 23 24 "github.com/vmware/govmomi/govc/cli" 25 "github.com/vmware/govmomi/govc/flags" 26 "github.com/vmware/govmomi/object" 27 "github.com/vmware/govmomi/vim25/mo" 28 "github.com/vmware/govmomi/vim25/types" 29 ) 30 31 type mark struct { 32 *flags.HostSystemFlag 33 34 ssd *bool 35 local *bool 36 } 37 38 func init() { 39 cli.Register("host.storage.mark", &mark{}) 40 } 41 42 func (cmd *mark) Register(ctx context.Context, f *flag.FlagSet) { 43 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 44 cmd.HostSystemFlag.Register(ctx, f) 45 46 f.Var(flags.NewOptionalBool(&cmd.ssd), "ssd", "Mark as SSD") 47 f.Var(flags.NewOptionalBool(&cmd.local), "local", "Mark as local") 48 } 49 50 func (cmd *mark) Process(ctx context.Context) error { 51 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 52 return err 53 } 54 return nil 55 } 56 57 func (cmd *mark) Usage() string { 58 return "DEVICE_PATH" 59 } 60 61 func (cmd *mark) Description() string { 62 return `Mark device at DEVICE_PATH.` 63 } 64 65 func (cmd *mark) Mark(ctx context.Context, ss *object.HostStorageSystem, uuid string) error { 66 var err error 67 var task *object.Task 68 69 if cmd.ssd != nil { 70 if *cmd.ssd { 71 task, err = ss.MarkAsSsd(ctx, uuid) 72 } else { 73 task, err = ss.MarkAsNonSsd(ctx, uuid) 74 } 75 76 if err != nil { 77 return err 78 } 79 80 err = task.Wait(ctx) 81 if err != nil { 82 return err 83 } 84 } 85 86 if cmd.local != nil { 87 if *cmd.local { 88 task, err = ss.MarkAsLocal(ctx, uuid) 89 } else { 90 task, err = ss.MarkAsNonLocal(ctx, uuid) 91 } 92 93 if err != nil { 94 return err 95 } 96 97 err = task.Wait(ctx) 98 if err != nil { 99 return err 100 } 101 } 102 103 return nil 104 } 105 106 func (cmd *mark) Run(ctx context.Context, f *flag.FlagSet) error { 107 if f.NArg() != 1 { 108 return fmt.Errorf("specify device path") 109 } 110 111 path := f.Args()[0] 112 113 host, err := cmd.HostSystem() 114 if err != nil { 115 return err 116 } 117 118 ss, err := host.ConfigManager().StorageSystem(ctx) 119 if err != nil { 120 return err 121 } 122 123 var hss mo.HostStorageSystem 124 err = ss.Properties(ctx, ss.Reference(), nil, &hss) 125 if err != nil { 126 return nil 127 } 128 129 for _, e := range hss.StorageDeviceInfo.ScsiLun { 130 disk, ok := e.(*types.HostScsiDisk) 131 if !ok { 132 continue 133 } 134 135 if disk.DevicePath == path { 136 return cmd.Mark(ctx, ss, disk.Uuid) 137 } 138 } 139 140 return fmt.Errorf("%s not found", path) 141 }