func (l *List) Run(cli *cli.Context) (err error) { if err = l.processParams(); err != nil { return err } if l.Debug.Debug > 0 { log.SetLevel(log.DebugLevel) trace.Logger.Level = log.DebugLevel } if len(cli.Args()) > 0 { log.Errorf("Unknown argument: %s", cli.Args()[0]) return errors.New("invalid CLI arguments") } log.Infof("### Listing VCHs ####") ctx, cancel := context.WithTimeout(context.Background(), l.Timeout) defer cancel() defer func() { if ctx.Err() != nil && ctx.Err() == context.DeadlineExceeded { //context deadline exceeded, replace returned error message err = errors.Errorf("List timed out: use --timeout to add more time") } }() var validator *validate.Validator if l.Data.ComputeResourcePath == "" { validator, err = validate.CreateNoDCCheck(ctx, l.Data) } else { validator, err = validate.NewValidator(ctx, l.Data) } if err != nil { log.Errorf("List cannot continue - failed to create validator: %s", err) return errors.New("list failed") } _, err = validator.ValidateTarget(ctx, l.Data) if err != nil { log.Errorf("List cannot continue - target validation failed: %s", err) return err } _, err = validator.ValidateCompute(ctx, l.Data) if err != nil { log.Errorf("List cannot continue - compute resource validation failed: %s", err) return err } executor := management.NewDispatcher(validator.Context, validator.Session, nil, false) vchs, err := executor.SearchVCHs(validator.ResourcePoolPath) if err != nil { log.Errorf("List cannot continue - failed to search VCHs in %s: %s", validator.ResourcePoolPath, err) } l.prettyPrint(cli, ctx, vchs, executor) return nil }
func TestFinder(t *testing.T) { log.SetLevel(log.DebugLevel) trace.Logger.Level = log.DebugLevel ctx := context.Background() for i, model := range []*simulator.Model{simulator.ESX(), simulator.VPX()} { t.Logf("%d", i) defer model.Remove() if i == 1 { model.Datacenter = 2 model.Cluster = 2 model.Host = 2 model.Pool = 0 } err := model.Create() if err != nil { t.Fatal(err) } s := model.Service.NewServer() defer s.Close() s.URL.User = url.UserPassword("user", "pass") s.URL.Path = "" t.Logf("server URL: %s", s.URL) var input *data.Data if i == 0 { input = getESXData(s.URL) } else { input = getVPXData(s.URL) } if err != nil { t.Fatal(err) } validator, err := validate.CreateNoDCCheck(ctx, input) if err != nil { t.Errorf("Failed to create validator: %s", err) } prefix := fmt.Sprintf("p%d-", i) if err = createTestData(ctx, validator.Session, prefix); err != nil { t.Errorf("Failed to create test data: %s", err) } // FIXME: ServerFaultCode: no such object: SearchIndex:ha-searchindex // testSearchVCHs(t, validator) } }