diff --git a/internal/services/v1/collector_work.go b/internal/services/v1/collector_work.go index 6ef911c5..c0761443 100644 --- a/internal/services/v1/collector_work.go +++ b/internal/services/v1/collector_work.go @@ -223,12 +223,24 @@ func (f *collectorWorkFactory) Build(creds models.Credentials) work.WorkBuilder2 if result.HasErrors() { log.Errorw("schema validation errors", "errors", result.Errors) - r.Err = fmt.Errorf("schema validation failed: %v", result.Errors) + r.Err = result.Error() + for _, e := range result.Errors { + if e.Code == "MISSING_CLUSTER" || e.Code == "NO_VMS" { + r.Err = fmt.Errorf("%w — this may indicate insufficient vCenter permissions; VMware can return incomplete inventory without an explicit permission error; verify your vCenter user has read-only access to all clusters and hosts", r.Err) + break + } + } return r, r.Err } if len(result.Warnings) > 0 { - log.Warnw("schema validation warnings", "warnings", result.Warnings) + for _, w := range result.Warnings { + if w.Code == "EMPTY_NETWORKS" || w.Code == "EMPTY_HOSTS" || w.Code == "EMPTY_DATASTORES" { + log.Warnw("schema validation warning (may indicate insufficient permissions)", "code", w.Code, "message", w.Message) + } else { + log.Warnw("schema validation warning", "code", w.Code, "message", w.Message) + } + } } log.Info("sqlite data successfully ingested into duckdb") diff --git a/internal/services/v2/collector_work.go b/internal/services/v2/collector_work.go index 4e62daa0..d839b829 100644 --- a/internal/services/v2/collector_work.go +++ b/internal/services/v2/collector_work.go @@ -243,12 +243,24 @@ func (f *vCenterCollectorWorkFactory) Build() work.WorkBuilder2[models.Collector if result.HasErrors() { log.Errorw("schema validation errors", "errors", result.Errors) - r.Err = fmt.Errorf("schema validation failed: %v", result.Errors) + r.Err = result.Error() + for _, e := range result.Errors { + if e.Code == "MISSING_CLUSTER" || e.Code == "NO_VMS" { + r.Err = fmt.Errorf("%w — this may indicate insufficient vCenter permissions; VMware can return incomplete inventory without an explicit permission error; verify your vCenter user has read-only access to all clusters and hosts", r.Err) + break + } + } return r, r.Err } if len(result.Warnings) > 0 { - log.Warnw("schema validation warnings", "warnings", result.Warnings) + for _, w := range result.Warnings { + if w.Code == "EMPTY_NETWORKS" || w.Code == "EMPTY_HOSTS" || w.Code == "EMPTY_DATASTORES" { + log.Warnw("schema validation warning (may indicate insufficient permissions)", "code", w.Code, "message", w.Message) + } else { + log.Warnw("schema validation warning", "code", w.Code, "message", w.Message) + } + } } log.Info("sqlite data successfully ingested into duckdb")