From 25de3690d603e95828a7522b04e8cd8baa6bc4ba Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Tue, 1 Nov 2016 21:17:00 -0700 Subject: [PATCH] Update vendor/govmomi to release 0.11.2 Fixes #2968 (NSX-T) Avoid possible VirtualMachine.Device NPE seen in #2818 Fix for #2878 (docker image update still required) --- .../github.com/vmware/govmomi/find/finder.go | 25 +++- .../vmware/govmomi/govc/datacenter/destroy.go | 83 -------------- .../vmware/govmomi/govc/datastore/upload.go | 4 +- .../vmware/govmomi/govc/device/cdrom/eject.go | 4 +- .../vmware/govmomi/govc/dvs/portgroup/add.go | 17 +-- .../govmomi/govc/dvs/portgroup/change.go | 107 ++++++++++++++++++ .../vmware/govmomi/govc/dvs/portgroup/spec.go | 55 +++++++++ .../vmware/govmomi/govc/events/command.go | 3 +- .../vmware/govmomi/govc/flags/datacenter.go | 4 + .../vmware/govmomi/govc/flags/version.go | 2 +- vendor/github.com/vmware/govmomi/govc/main.go | 1 + .../govc/{folder => object}/destroy.go | 51 +++++---- .../vmware/govmomi/govc/object/mv.go | 92 +++++++++++++++ .../{folder/move_into.go => object/reload.go} | 60 +++++----- .../govmomi/govc/{folder => object}/rename.go | 46 ++++---- .../vmware/govmomi/govc/pool/change.go | 2 +- .../github.com/vmware/govmomi/govc/vm/info.go | 8 ++ .../github.com/vmware/govmomi/list/lister.go | 2 + .../object/distributed_virtual_portgroup.go | 15 +++ .../govmomi/object/host_config_manager.go | 17 ++- .../github.com/vmware/govmomi/object/types.go | 2 +- .../vmware/govmomi/object/virtual_machine.go | 12 +- vendor/manifest | 2 +- 23 files changed, 430 insertions(+), 184 deletions(-) delete mode 100644 vendor/github.com/vmware/govmomi/govc/datacenter/destroy.go create mode 100644 vendor/github.com/vmware/govmomi/govc/dvs/portgroup/change.go create mode 100644 vendor/github.com/vmware/govmomi/govc/dvs/portgroup/spec.go rename vendor/github.com/vmware/govmomi/govc/{folder => object}/destroy.go (70%) create mode 100644 vendor/github.com/vmware/govmomi/govc/object/mv.go rename vendor/github.com/vmware/govmomi/govc/{folder/move_into.go => object/reload.go} (51%) rename vendor/github.com/vmware/govmomi/govc/{folder => object}/rename.go (62%) diff --git a/vendor/github.com/vmware/govmomi/find/finder.go b/vendor/github.com/vmware/govmomi/find/finder.go index 68eecdee3d..c25aa04a1b 100644 --- a/vendor/github.com/vmware/govmomi/find/finder.go +++ b/vendor/github.com/vmware/govmomi/find/finder.go @@ -599,7 +599,7 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network for _, e := range es { ref := e.Object.Reference() switch ref.Type { - case "Network": + case "Network", "OpaqueNetwork": r := object.NewNetwork(f.client, ref) r.InventoryPath = e.Path ns = append(ns, r) @@ -714,6 +714,29 @@ func (f *Finder) ResourcePoolOrDefault(ctx context.Context, path string) (*objec return f.DefaultResourcePool(ctx) } +// ResourcePoolListAll combines ResourcePoolList and VirtualAppList +// VirtualAppList is only called if ResourcePoolList does not find any pools with the given path. +func (f *Finder) ResourcePoolListAll(ctx context.Context, path string) ([]*object.ResourcePool, error) { + pools, err := f.ResourcePoolList(ctx, path) + if err != nil { + if _, ok := err.(*NotFoundError); !ok { + return nil, err + } + + vapps, _ := f.VirtualAppList(ctx, path) + + if len(vapps) == 0 { + return nil, err + } + + for _, vapp := range vapps { + pools = append(pools, vapp.ResourcePool) + } + } + + return pools, nil +} + func (f *Finder) DefaultFolder(ctx context.Context) (*object.Folder, error) { ref, err := f.vmFolder(ctx) if err != nil { diff --git a/vendor/github.com/vmware/govmomi/govc/datacenter/destroy.go b/vendor/github.com/vmware/govmomi/govc/datacenter/destroy.go deleted file mode 100644 index 9936c3504a..0000000000 --- a/vendor/github.com/vmware/govmomi/govc/datacenter/destroy.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package datacenter - -import ( - "context" - "flag" - - "github.com/vmware/govmomi/find" - "github.com/vmware/govmomi/govc/cli" - "github.com/vmware/govmomi/govc/flags" -) - -type destroy struct { - *flags.ClientFlag -} - -func init() { - cli.Register("datacenter.destroy", &destroy{}) -} - -func (cmd *destroy) Register(ctx context.Context, f *flag.FlagSet) { - cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) - cmd.ClientFlag.Register(ctx, f) -} - -func (cmd *destroy) Usage() string { - return "PATH..." -} - -func (cmd *destroy) Process(ctx context.Context) error { - if err := cmd.ClientFlag.Process(ctx); err != nil { - return err - } - return nil -} - -func (cmd *destroy) Run(ctx context.Context, f *flag.FlagSet) error { - if f.NArg() == 0 { - return flag.ErrHelp - } - - client, err := cmd.ClientFlag.Client() - if err != nil { - return err - } - - finder := find.NewFinder(client, false) - - for _, path := range f.Args() { - dcs, err := finder.DatacenterList(ctx, path) - if err != nil { - return err - } - - for _, dc := range dcs { - task, err := dc.Destroy(ctx) - if err != nil { - return err - } - - if err := task.Wait(ctx); err != nil { - return err - } - } - } - - return nil -} diff --git a/vendor/github.com/vmware/govmomi/govc/datastore/upload.go b/vendor/github.com/vmware/govmomi/govc/datastore/upload.go index 2ccb1fafff..2d9420d28f 100644 --- a/vendor/github.com/vmware/govmomi/govc/datastore/upload.go +++ b/vendor/github.com/vmware/govmomi/govc/datastore/upload.go @@ -64,8 +64,8 @@ func (cmd *upload) Description() string { If SOURCE name is "-", read source from stdin. Examples: - govc datasore.upload -ds datastore1 ./config.iso vm-name/config.iso - genisoimage ... | govc datasore.upload -ds datastore1 - vm-name/config.iso` + govc datastore.upload -ds datastore1 ./config.iso vm-name/config.iso + genisoimage ... | govc datastore.upload -ds datastore1 - vm-name/config.iso` } func (cmd *upload) Run(ctx context.Context, f *flag.FlagSet) error { diff --git a/vendor/github.com/vmware/govmomi/govc/device/cdrom/eject.go b/vendor/github.com/vmware/govmomi/govc/device/cdrom/eject.go index d445ef9dde..78cce90d1a 100644 --- a/vendor/github.com/vmware/govmomi/govc/device/cdrom/eject.go +++ b/vendor/github.com/vmware/govmomi/govc/device/cdrom/eject.go @@ -54,8 +54,8 @@ func (cmd *eject) Description() string { If device is not specified, the first CD-ROM device is used. Examples: - govc device.floppy.eject -vm vm-1 - govc device.floppy.eject -vm vm-1 -device floppy-1` + govc device.cdrom.eject -vm vm-1 + govc device.cdrom.eject -vm vm-1 -device floppy-1` } func (cmd *eject) Run(ctx context.Context, f *flag.FlagSet) error { diff --git a/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/add.go b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/add.go index 2d84009e0d..689ea3f6d0 100644 --- a/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/add.go +++ b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/add.go @@ -20,7 +20,6 @@ import ( "context" "flag" "fmt" - "strings" "github.com/vmware/govmomi/govc/cli" "github.com/vmware/govmomi/govc/flags" @@ -31,7 +30,7 @@ import ( type add struct { *flags.DatacenterFlag - types.DVPortgroupConfigSpec + DVPortgroupConfigSpec path string } @@ -46,17 +45,9 @@ func (cmd *add) Register(ctx context.Context, f *flag.FlagSet) { f.StringVar(&cmd.path, "dvs", "", "DVS path") - ptypes := []string{ - string(types.DistributedVirtualPortgroupPortgroupTypeEarlyBinding), - string(types.DistributedVirtualPortgroupPortgroupTypeLateBinding), - string(types.DistributedVirtualPortgroupPortgroupTypeEphemeral), - } - - f.StringVar(&cmd.DVPortgroupConfigSpec.Type, "type", ptypes[0], - fmt.Sprintf("Portgroup type (%s)", strings.Join(ptypes, "|"))) - cmd.DVPortgroupConfigSpec.NumPorts = 128 // default - f.Var(flags.NewInt32(&cmd.DVPortgroupConfigSpec.NumPorts), "nports", "Number of ports") + + cmd.DVPortgroupConfigSpec.Register(ctx, f) } func (cmd *add) Description() string { @@ -103,7 +94,7 @@ func (cmd *add) Run(ctx context.Context, f *flag.FlagSet) error { cmd.DVPortgroupConfigSpec.Name = name - task, err := dvs.AddPortgroup(ctx, []types.DVPortgroupConfigSpec{cmd.DVPortgroupConfigSpec}) + task, err := dvs.AddPortgroup(ctx, []types.DVPortgroupConfigSpec{cmd.Spec()}) if err != nil { return err } diff --git a/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/change.go b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/change.go new file mode 100644 index 0000000000..e3c1643a2d --- /dev/null +++ b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/change.go @@ -0,0 +1,107 @@ +/* +Copyright (c) 2015 VMware, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portgroup + +import ( + "context" + "flag" + "fmt" + + "github.com/vmware/govmomi/govc/cli" + "github.com/vmware/govmomi/govc/flags" + "github.com/vmware/govmomi/object" + "github.com/vmware/govmomi/vim25/mo" +) + +type change struct { + *flags.DatacenterFlag + + DVPortgroupConfigSpec +} + +func init() { + cli.Register("dvs.portgroup.change", &change{}) +} + +func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { + cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) + cmd.DatacenterFlag.Register(ctx, f) + + cmd.DVPortgroupConfigSpec.Register(ctx, f) +} + +func (cmd *change) Description() string { + return `Change DVS portgroup configuration. + +Examples: + govc dvs.portgroup.change -nports 26 ExternalNetwork + govc dvs.portgroup.change -vlan 3214 ExternalNetwork` +} + +func (cmd *change) Process(ctx context.Context) error { + if err := cmd.DatacenterFlag.Process(ctx); err != nil { + return err + } + return nil +} + +func (cmd *change) Usage() string { + return "PATH" +} + +func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { + if f.NArg() != 1 { + return flag.ErrHelp + } + + path := f.Arg(0) + + finder, err := cmd.Finder() + if err != nil { + return err + } + + net, err := finder.Network(ctx, path) + if err != nil { + return err + } + + pg, ok := net.(*object.DistributedVirtualPortgroup) + if !ok { + return fmt.Errorf("%s (%T) is not of type %T", path, net, pg) + } + + var s mo.DistributedVirtualPortgroup + err = pg.Properties(ctx, pg.Reference(), []string{"config.configVersion"}, &s) + if err != nil { + return err + } + + spec := cmd.Spec() + spec.ConfigVersion = s.Config.ConfigVersion + + task, err := pg.Reconfigure(ctx, spec) + if err != nil { + return err + } + + logger := cmd.ProgressLogger(fmt.Sprintf("changing %s portgroup configuration %s... ", pg.Name(), pg.InventoryPath)) + defer logger.Wait() + + _, err = task.WaitForResult(ctx, logger) + return err +} diff --git a/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/spec.go b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/spec.go new file mode 100644 index 0000000000..fb643d2020 --- /dev/null +++ b/vendor/github.com/vmware/govmomi/govc/dvs/portgroup/spec.go @@ -0,0 +1,55 @@ +/* +Copyright (c) 2016 VMware, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portgroup + +import ( + "context" + "flag" + "fmt" + "strings" + + "github.com/vmware/govmomi/govc/flags" + "github.com/vmware/govmomi/vim25/types" +) + +type DVPortgroupConfigSpec struct { + types.DVPortgroupConfigSpec +} + +func (spec *DVPortgroupConfigSpec) Register(ctx context.Context, f *flag.FlagSet) { + ptypes := []string{ + string(types.DistributedVirtualPortgroupPortgroupTypeEarlyBinding), + string(types.DistributedVirtualPortgroupPortgroupTypeLateBinding), + string(types.DistributedVirtualPortgroupPortgroupTypeEphemeral), + } + + f.StringVar(&spec.Type, "type", ptypes[0], + fmt.Sprintf("Portgroup type (%s)", strings.Join(ptypes, "|"))) + + f.Var(flags.NewInt32(&spec.NumPorts), "nports", "Number of ports") + + config := new(types.VMwareDVSPortSetting) + vlan := new(types.VmwareDistributedVirtualSwitchVlanIdSpec) + spec.DefaultPortConfig = config + config.Vlan = vlan + + f.Var(flags.NewInt32(&vlan.VlanId), "vlan", "VLAN ID") +} + +func (spec *DVPortgroupConfigSpec) Spec() types.DVPortgroupConfigSpec { + return spec.DVPortgroupConfigSpec +} diff --git a/vendor/github.com/vmware/govmomi/govc/events/command.go b/vendor/github.com/vmware/govmomi/govc/events/command.go index 6677715ba9..35191739d0 100644 --- a/vendor/github.com/vmware/govmomi/govc/events/command.go +++ b/vendor/github.com/vmware/govmomi/govc/events/command.go @@ -57,7 +57,8 @@ func (cmd *events) Description() string { return `Display events. Examples: - govc events vm1 vm2 + govc events vm/my-vm1 vm/my-vm2 + govc events /dc1/vm/* /dc2/vm/* govc ls -t HostSystem host/* | xargs govc events | grep -i vsan` } diff --git a/vendor/github.com/vmware/govmomi/govc/flags/datacenter.go b/vendor/github.com/vmware/govmomi/govc/flags/datacenter.go index 531bcabc7c..a776ed6e90 100644 --- a/vendor/github.com/vmware/govmomi/govc/flags/datacenter.go +++ b/vendor/github.com/vmware/govmomi/govc/flags/datacenter.go @@ -150,6 +150,10 @@ func (flag *DatacenterFlag) ManagedObjects(ctx context.Context, args []string) ( return nil, err } + if len(elements) == 0 { + return nil, fmt.Errorf("object '%s' not found", arg) + } + for _, e := range elements { refs = append(refs, e.Object.Reference()) } diff --git a/vendor/github.com/vmware/govmomi/govc/flags/version.go b/vendor/github.com/vmware/govmomi/govc/flags/version.go index 7e005ca0b0..55333988ca 100644 --- a/vendor/github.com/vmware/govmomi/govc/flags/version.go +++ b/vendor/github.com/vmware/govmomi/govc/flags/version.go @@ -21,7 +21,7 @@ import ( "strings" ) -const Version = "0.10.0" +const Version = "0.11.2" type version []int diff --git a/vendor/github.com/vmware/govmomi/govc/main.go b/vendor/github.com/vmware/govmomi/govc/main.go index 7be0da751d..d552608177 100644 --- a/vendor/github.com/vmware/govmomi/govc/main.go +++ b/vendor/github.com/vmware/govmomi/govc/main.go @@ -56,6 +56,7 @@ import ( _ "github.com/vmware/govmomi/govc/license" _ "github.com/vmware/govmomi/govc/logs" _ "github.com/vmware/govmomi/govc/ls" + _ "github.com/vmware/govmomi/govc/object" _ "github.com/vmware/govmomi/govc/permissions" _ "github.com/vmware/govmomi/govc/pool" _ "github.com/vmware/govmomi/govc/session" diff --git a/vendor/github.com/vmware/govmomi/govc/folder/destroy.go b/vendor/github.com/vmware/govmomi/govc/object/destroy.go similarity index 70% rename from vendor/github.com/vmware/govmomi/govc/folder/destroy.go rename to vendor/github.com/vmware/govmomi/govc/object/destroy.go index 95cbcb897c..7429bc51eb 100644 --- a/vendor/github.com/vmware/govmomi/govc/folder/destroy.go +++ b/vendor/github.com/vmware/govmomi/govc/object/destroy.go @@ -14,14 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -package folder +package object import ( "context" "flag" + "fmt" "github.com/vmware/govmomi/govc/cli" "github.com/vmware/govmomi/govc/flags" + "github.com/vmware/govmomi/object" ) type destroy struct { @@ -29,7 +31,7 @@ type destroy struct { } func init() { - cli.Register("folder.destroy", &destroy{}) + cli.Register("object.destroy", &destroy{}) } func (cmd *destroy) Register(ctx context.Context, f *flag.FlagSet) { @@ -37,6 +39,17 @@ func (cmd *destroy) Register(ctx context.Context, f *flag.FlagSet) { cmd.DatacenterFlag.Register(ctx, f) } +func (cmd *destroy) Usage() string { + return "PATH..." +} + +func (cmd *destroy) Description() string { + return `Destroy managed objects. + +Examples: + govc object.destroy /dc1/network/dvs /dc1/host/cluster` +} + func (cmd *destroy) Process(ctx context.Context) error { if err := cmd.DatacenterFlag.Process(ctx); err != nil { return err @@ -44,40 +57,32 @@ func (cmd *destroy) Process(ctx context.Context) error { return nil } -func (cmd *destroy) Usage() string { - return "FOLDER..." -} - -func (cmd *destroy) Description() string { - return "Destroy one or more FOLDERs." -} - func (cmd *destroy) Run(ctx context.Context, f *flag.FlagSet) error { if f.NArg() == 0 { return flag.ErrHelp } - finder, err := cmd.Finder() + c, err := cmd.Client() + if err != nil { + return err + } + + objs, err := cmd.ManagedObjects(ctx, f.Args()) if err != nil { return err } - for _, arg := range f.Args() { - folders, err := finder.FolderList(ctx, arg) + for _, obj := range objs { + task, err := object.NewCommon(c, obj).Destroy(ctx) if err != nil { return err } - for _, folder := range folders { - task, err := folder.Destroy(ctx) - if err != nil { - return err - } - - err = task.Wait(ctx) - if err != nil { - return err - } + logger := cmd.ProgressLogger(fmt.Sprintf("destroying %s... ", obj)) + _, err = task.WaitForResult(ctx, logger) + logger.Wait() + if err != nil { + return err } } diff --git a/vendor/github.com/vmware/govmomi/govc/object/mv.go b/vendor/github.com/vmware/govmomi/govc/object/mv.go new file mode 100644 index 0000000000..42c288246b --- /dev/null +++ b/vendor/github.com/vmware/govmomi/govc/object/mv.go @@ -0,0 +1,92 @@ +/* +Copyright (c) 2016 VMware, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package object + +import ( + "context" + "flag" + "fmt" + + "github.com/vmware/govmomi/govc/cli" + "github.com/vmware/govmomi/govc/flags" +) + +type mv struct { + *flags.DatacenterFlag +} + +func init() { + cli.Register("object.mv", &mv{}) +} + +func (cmd *mv) Register(ctx context.Context, f *flag.FlagSet) { + cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) + cmd.DatacenterFlag.Register(ctx, f) +} + +func (cmd *mv) Usage() string { + return "PATH... FOLDER" +} + +func (cmd *mv) Description() string { + return `Move managed entities to FOLDER. + +Examples: + govc folder.create /dc1/host/example + govc object.mv /dc2/host/*.example.com /dc1/host/example` +} + +func (cmd *mv) Process(ctx context.Context) error { + if err := cmd.DatacenterFlag.Process(ctx); err != nil { + return err + } + return nil +} + +func (cmd *mv) Run(ctx context.Context, f *flag.FlagSet) error { + if f.NArg() < 2 { + return flag.ErrHelp + } + + finder, err := cmd.Finder() + if err != nil { + return err + } + + n := f.NArg() - 1 + + folder, err := finder.Folder(ctx, f.Arg(n)) + if err != nil { + return err + } + + objs, err := cmd.ManagedObjects(ctx, f.Args()[:n]) + if err != nil { + return err + } + + task, err := folder.MoveInto(ctx, objs) + if err != nil { + return err + } + + logger := cmd.ProgressLogger(fmt.Sprintf("moving %d objects to %s... ", len(objs), folder.InventoryPath)) + _, err = task.WaitForResult(ctx, logger) + logger.Wait() + + return err +} diff --git a/vendor/github.com/vmware/govmomi/govc/folder/move_into.go b/vendor/github.com/vmware/govmomi/govc/object/reload.go similarity index 51% rename from vendor/github.com/vmware/govmomi/govc/folder/move_into.go rename to vendor/github.com/vmware/govmomi/govc/object/reload.go index ad67d98c95..6546a7d38b 100644 --- a/vendor/github.com/vmware/govmomi/govc/folder/move_into.go +++ b/vendor/github.com/vmware/govmomi/govc/object/reload.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package folder +package object import ( "context" @@ -22,65 +22,67 @@ import ( "github.com/vmware/govmomi/govc/cli" "github.com/vmware/govmomi/govc/flags" + "github.com/vmware/govmomi/vim25/methods" + "github.com/vmware/govmomi/vim25/types" ) -type move struct { - *flags.ClientFlag - *flags.FolderFlag +type reload struct { + *flags.DatacenterFlag } func init() { - cli.Register("folder.moveinto", &move{}) + cli.Register("object.reload", &reload{}) } -func (cmd *move) Register(ctx context.Context, f *flag.FlagSet) { - cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) - cmd.ClientFlag.Register(ctx, f) - - cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) - cmd.FolderFlag.Register(ctx, f) +func (cmd *reload) Register(ctx context.Context, f *flag.FlagSet) { + cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) + cmd.DatacenterFlag.Register(ctx, f) } -func (cmd *move) Usage() string { +func (cmd *reload) Usage() string { return "PATH..." } -func (cmd *move) Description() string { - return `Move managed entities into this folder. +func (cmd *reload) Description() string { + return `Reload managed object state. Examples: - govc folder.moveinto -folder /dc1/folder-foo /dc2/folder-bar/*` + govc datastore.upload $vm.vmx $vm/$vm.vmx + govc object.reload /dc1/vm/$vm` } -func (cmd *move) Process(ctx context.Context) error { - if err := cmd.ClientFlag.Process(ctx); err != nil { - return err - } - if err := cmd.FolderFlag.Process(ctx); err != nil { +func (cmd *reload) Process(ctx context.Context) error { + if err := cmd.DatacenterFlag.Process(ctx); err != nil { return err } return nil } -func (cmd *move) Run(ctx context.Context, f *flag.FlagSet) error { - folder, err := cmd.Folder() - if err != nil { - return err - } - +func (cmd *reload) Run(ctx context.Context, f *flag.FlagSet) error { if f.NArg() == 0 { return flag.ErrHelp } - objs, err := cmd.ManagedObjects(ctx, f.Args()) + c, err := cmd.Client() if err != nil { return err } - task, err := folder.MoveInto(ctx, objs) + objs, err := cmd.ManagedObjects(ctx, f.Args()) if err != nil { return err } - return task.Wait(ctx) + for _, obj := range objs { + req := types.Reload{ + This: obj, + } + + _, err = methods.Reload(ctx, c, &req) + if err != nil { + return err + } + } + + return nil } diff --git a/vendor/github.com/vmware/govmomi/govc/folder/rename.go b/vendor/github.com/vmware/govmomi/govc/object/rename.go similarity index 62% rename from vendor/github.com/vmware/govmomi/govc/folder/rename.go rename to vendor/github.com/vmware/govmomi/govc/object/rename.go index 54db67bf95..4684cb91d2 100644 --- a/vendor/github.com/vmware/govmomi/govc/folder/rename.go +++ b/vendor/github.com/vmware/govmomi/govc/object/rename.go @@ -14,68 +14,72 @@ See the License for the specific language governing permissions and limitations under the License. */ -package folder +package object import ( "context" "flag" + "fmt" "github.com/vmware/govmomi/govc/cli" "github.com/vmware/govmomi/govc/flags" + "github.com/vmware/govmomi/object" ) type rename struct { - *flags.ClientFlag - *flags.FolderFlag + *flags.DatacenterFlag } func init() { - cli.Register("folder.rename", &rename{}) + cli.Register("object.rename", &rename{}) } func (cmd *rename) Register(ctx context.Context, f *flag.FlagSet) { - cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) - cmd.ClientFlag.Register(ctx, f) - - cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) - cmd.FolderFlag.Register(ctx, f) + cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) + cmd.DatacenterFlag.Register(ctx, f) } func (cmd *rename) Usage() string { - return "NAME" + return "PATH NAME" } func (cmd *rename) Description() string { - return `Rename an existing folder with NAME. + return `Rename managed objects. Examples: - govc folder.rename -folder /dc1/vm/folder-foo folder-bar` + govc object.rename /dc1/network/dvs1 Switch1` } func (cmd *rename) Process(ctx context.Context) error { - if err := cmd.ClientFlag.Process(ctx); err != nil { - return err - } - if err := cmd.FolderFlag.Process(ctx); err != nil { + if err := cmd.DatacenterFlag.Process(ctx); err != nil { return err } return nil } func (cmd *rename) Run(ctx context.Context, f *flag.FlagSet) error { - folder, err := cmd.Folder() + if f.NArg() != 2 { + return flag.ErrHelp + } + + c, err := cmd.Client() if err != nil { return err } - if f.NArg() != 1 { - return flag.ErrHelp + objs, err := cmd.ManagedObjects(ctx, f.Args()[:1]) + if err != nil { + return err } - task, err := folder.Rename(ctx, f.Arg(0)) + task, err := object.NewCommon(c, objs[0]).Rename(ctx, f.Arg(1)) if err != nil { return err } - return task.Wait(ctx) + logger := cmd.ProgressLogger(fmt.Sprintf("renaming %s... ", objs[0])) + _, err = task.WaitForResult(ctx, logger) + logger.Wait() + + return err } diff --git a/vendor/github.com/vmware/govmomi/govc/pool/change.go b/vendor/github.com/vmware/govmomi/govc/pool/change.go index 7ccf61c891..a8d50e6818 100644 --- a/vendor/github.com/vmware/govmomi/govc/pool/change.go +++ b/vendor/github.com/vmware/govmomi/govc/pool/change.go @@ -81,7 +81,7 @@ func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { }) for _, arg := range f.Args() { - pools, err := finder.ResourcePoolList(ctx, arg) + pools, err := finder.ResourcePoolListAll(ctx, arg) if err != nil { return err } diff --git a/vendor/github.com/vmware/govmomi/govc/vm/info.go b/vendor/github.com/vmware/govmomi/govc/vm/info.go index 38083fe792..ca075d8f52 100644 --- a/vendor/github.com/vmware/govmomi/govc/vm/info.go +++ b/vendor/github.com/vmware/govmomi/govc/vm/info.go @@ -168,6 +168,7 @@ func (r *infoResult) collectReferences(pc *property.Collector, ctx context.Conte var host []mo.HostSystem var network []mo.Network + var opaque []mo.OpaqueNetwork var dvp []mo.DistributedVirtualPortgroup var datastore []mo.Datastore // Table to drive inflating refs to their mo.* counterparts (dest) @@ -193,6 +194,13 @@ func (r *infoResult) collectReferences(pc *property.Collector, ctx context.Conte } }, }, + "OpaqueNetwork": { + &opaque, nil, func() { + for _, e := range opaque { + r.entities[e.Reference()] = e.Name + } + }, + }, "DistributedVirtualPortgroup": { &dvp, nil, func() { for _, e := range dvp { diff --git a/vendor/github.com/vmware/govmomi/list/lister.go b/vendor/github.com/vmware/govmomi/list/lister.go index 4ee81a6730..ae162b7fc2 100644 --- a/vendor/github.com/vmware/govmomi/list/lister.go +++ b/vendor/github.com/vmware/govmomi/list/lister.go @@ -79,6 +79,8 @@ func ToElement(r mo.Reference, prefix string) Element { // Network entity folders on an ESXi host can contain only Network objects. case mo.Network: name = m.Name + case mo.OpaqueNetwork: + name = m.Name case mo.DistributedVirtualSwitch: name = m.Name case mo.DistributedVirtualPortgroup: diff --git a/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go b/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go index a16d406212..864bb783f3 100644 --- a/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go +++ b/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go @@ -20,6 +20,7 @@ import ( "context" "github.com/vmware/govmomi/vim25" + "github.com/vmware/govmomi/vim25/methods" "github.com/vmware/govmomi/vim25/mo" "github.com/vmware/govmomi/vim25/types" ) @@ -56,3 +57,17 @@ func (p DistributedVirtualPortgroup) EthernetCardBackingInfo(ctx context.Context return backing, nil } + +func (p DistributedVirtualPortgroup) Reconfigure(ctx context.Context, spec types.DVPortgroupConfigSpec) (*Task, error) { + req := types.ReconfigureDVPortgroup_Task{ + This: p.Reference(), + Spec: spec, + } + + res, err := methods.ReconfigureDVPortgroup_Task(ctx, p.Client(), &req) + if err != nil { + return nil, err + } + + return NewTask(p.Client(), res.Returnval), nil +} diff --git a/vendor/github.com/vmware/govmomi/object/host_config_manager.go b/vendor/github.com/vmware/govmomi/object/host_config_manager.go index 9d89dd14b3..6f061a6d14 100644 --- a/vendor/github.com/vmware/govmomi/object/host_config_manager.go +++ b/vendor/github.com/vmware/govmomi/object/host_config_manager.go @@ -113,12 +113,21 @@ func (m HostConfigManager) AccountManager(ctx context.Context) (*HostAccountMana return nil, err } - // Added in 6.0 - if h.ConfigManager.AccountManager == nil { - return nil, ErrNotSupported + ref := h.ConfigManager.AccountManager // Added in 6.0 + if ref == nil { + // Versions < 5.5 can use the ServiceContent ref, + // but we can only use it when connected directly to ESX. + c := m.Client() + if !c.IsVC() { + ref = c.ServiceContent.AccountManager + } + + if ref == nil { + return nil, ErrNotSupported + } } - return NewHostAccountManager(m.c, *h.ConfigManager.AccountManager), nil + return NewHostAccountManager(m.c, *ref), nil } func (m HostConfigManager) OptionManager(ctx context.Context) (*OptionManager, error) { diff --git a/vendor/github.com/vmware/govmomi/object/types.go b/vendor/github.com/vmware/govmomi/object/types.go index f61aa362c4..aefb611fde 100644 --- a/vendor/github.com/vmware/govmomi/object/types.go +++ b/vendor/github.com/vmware/govmomi/object/types.go @@ -47,7 +47,7 @@ func NewReference(c *vim25.Client, e types.ManagedObjectReference) Reference { return NewClusterComputeResource(c, e) case "HostSystem": return NewHostSystem(c, e) - case "Network": + case "Network", "OpaqueNetwork": return NewNetwork(c, e) case "ResourcePool": return NewResourcePool(c, e) diff --git a/vendor/github.com/vmware/govmomi/object/virtual_machine.go b/vendor/github.com/vmware/govmomi/object/virtual_machine.go index 7610a98b58..2973a62a86 100644 --- a/vendor/github.com/vmware/govmomi/object/virtual_machine.go +++ b/vendor/github.com/vmware/govmomi/object/virtual_machine.go @@ -302,11 +302,21 @@ func (v VirtualMachine) WaitForNetIP(ctx context.Context, v4 bool) (map[string][ func (v VirtualMachine) Device(ctx context.Context) (VirtualDeviceList, error) { var o mo.VirtualMachine - err := v.Properties(ctx, v.Reference(), []string{"config.hardware.device"}, &o) + err := v.Properties(ctx, v.Reference(), []string{"config.hardware.device", "summary.runtime.connectionState"}, &o) if err != nil { return nil, err } + // Quoting the SDK doc: + // The virtual machine configuration is not guaranteed to be available. + // For example, the configuration information would be unavailable if the server + // is unable to access the virtual machine files on disk, and is often also unavailable + // during the initial phases of virtual machine creation. + if o.Config == nil { + return nil, fmt.Errorf("%s Config is not available, connectionState=%s", + v.Reference(), o.Summary.Runtime.ConnectionState) + } + return VirtualDeviceList(o.Config.Hardware.Device), nil } diff --git a/vendor/manifest b/vendor/manifest index e844630689..54a2ba5c5b 100644 --- a/vendor/manifest +++ b/vendor/manifest @@ -674,7 +674,7 @@ "importpath": "github.com/vmware/govmomi", "repository": "https://github.com/vmware/govmomi", "vcs": "git", - "revision": "bb498f73762deb009468da8c3bd93b7c6002a63e", + "revision": "cd80b8e8a7075484941720e24faa3c9a98cfa2cc", "branch": "master" }, {