func (l Lister) ListDatacenter(ctx context.Context) ([]Element, error) { ospec := types.ObjectSpec{ Obj: l.Reference, Skip: types.NewBool(true), } // Include every datastore folder in the select set fields := []string{ "vmFolder", "hostFolder", "datastoreFolder", "networkFolder", } for _, f := range fields { tspec := types.TraversalSpec{ Path: f, Skip: types.NewBool(false), Type: "Datacenter", } ospec.SelectSet = append(ospec.SelectSet, &tspec) } pspec := types.PropertySpec{ Type: "Folder", } if l.All { pspec.All = types.NewBool(true) } else { pspec.PathSet = []string{"name"} } req := types.RetrieveProperties{ SpecSet: []types.PropertyFilterSpec{ { ObjectSet: []types.ObjectSpec{ospec}, PropSet: []types.PropertySpec{pspec}, }, }, } var dst []interface{} err := l.retrieveProperties(ctx, req, &dst) if err != nil { return nil, err } es := []Element{} for _, v := range dst { es = append(es, ToElement(v.(mo.Reference), l.Prefix)) } return es, nil }
func (l Lister) ListVirtualApp(ctx context.Context) ([]Element, error) { ospec := types.ObjectSpec{ Obj: l.Reference, Skip: types.NewBool(true), } fields := []string{ "resourcePool", "vm", } for _, f := range fields { tspec := types.TraversalSpec{ Path: f, Skip: types.NewBool(false), Type: "VirtualApp", } ospec.SelectSet = append(ospec.SelectSet, &tspec) } childTypes := []string{ "ResourcePool", "VirtualMachine", } var pspecs []types.PropertySpec for _, t := range childTypes { pspec := types.PropertySpec{ Type: t, } if l.All { pspec.All = types.NewBool(true) } else { pspec.PathSet = []string{"name"} } pspecs = append(pspecs, pspec) } req := types.RetrieveProperties{ SpecSet: []types.PropertyFilterSpec{ { ObjectSet: []types.ObjectSpec{ospec}, PropSet: pspecs, }, }, } var dst []interface{} err := l.retrieveProperties(ctx, req, &dst) if err != nil { return nil, err } es := []Element{} for _, v := range dst { es = append(es, ToElement(v.(mo.Reference), l.Prefix)) } return es, nil }