diff --git a/govc/vm/disk/change.go b/govc/vm/disk/change.go index f2b83afab..8e55dcc5c 100644 --- a/govc/vm/disk/change.go +++ b/govc/vm/disk/change.go @@ -41,6 +41,9 @@ type change struct { bytes units.ByteSize mode string + + // SIOC + limit int64 } func init() { @@ -73,6 +76,7 @@ func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { f.IntVar(&cmd.key, "disk.key", 0, "Disk unique key") f.StringVar(&cmd.mode, "mode", "", fmt.Sprintf("Disk mode (%s)", strings.Join(vdmTypes, "|"))) f.StringVar(&cmd.sharing, "sharing", "", fmt.Sprintf("Sharing (%s)", strings.Join(sharing, "|"))) + f.Int64Var(&cmd.limit, "disk.io.limit", 0, "Disk storage IO per seconds limit (-1 for unlimited)") } func (cmd *change) Process(ctx context.Context) error { @@ -152,6 +156,13 @@ func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { editdisk.CapacityInKB = int64(cmd.bytes) / 1024 } + current := editdisk.StorageIOAllocation.Limit + desired := cmd.limit + + if desired != 0 && *current != desired { + editdisk.StorageIOAllocation.Limit = types.NewInt64(desired) + } + switch backing := editdisk.Backing.(type) { case *types.VirtualDiskFlatVer2BackingInfo: backing.Sharing = cmd.sharing