Files
terraform-provider-virtfusion/internal/client/errors.go
Andrew 6b7430b67b Overhaul VirtFusion provider: 20 resources, 30 data sources, multipage pagination
Complete rewrite of the VirtFusion Terraform provider with full API coverage:

- 20 managed resources (server, build, SSH key, user, firewall, IP blocks, etc.)
- 30 data sources (hypervisors, packages, servers, IP blocks, self-service, etc.)
- New HTTP client with proper error handling, query parameter support, and
  automatic multipage pagination via GetAllPages (fetches all pages from
  Laravel-style paginated endpoints and merges into a single response)
- Fixed type mismatches against live API: ServerData.Suspended (int→bool),
  IPBlockData.Type (string→int), PackageData json tags (primaryStorage, etc.),
  ServerData nested CPU/Settings/Resources structure, HypervisorGroupResources
  array response
- Configurable results-per-page (default 300) on all list data sources
- Migrated CI from GitHub Actions to Gitea Actions
- Updated goreleaser config, go.mod dependencies, and examples

Verified against live VirtFusion instance at cp.vps.ezscale.tech:
all data sources return correct data with full pagination support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:01:16 -04:00

35 lines
915 B
Go

// Copyright (c) EZSCALE.
// SPDX-License-Identifier: MPL-2.0
package client
import "fmt"
// APIError represents an error returned by the VirtFusion API.
type APIError struct {
StatusCode int
Status string
Body string
Errors map[string][]string
}
func (e *APIError) Error() string {
if len(e.Errors) > 0 {
return fmt.Sprintf("VirtFusion API error %d (%s): %v", e.StatusCode, e.Status, e.Errors)
}
if e.Body != "" {
return fmt.Sprintf("VirtFusion API error %d (%s): %s", e.StatusCode, e.Status, e.Body)
}
return fmt.Sprintf("VirtFusion API error %d (%s)", e.StatusCode, e.Status)
}
// IsNotFound returns true if the error is a 404 Not Found response.
func (e *APIError) IsNotFound() bool {
return e.StatusCode == 404
}
// IsValidationError returns true if the error is a 422 Unprocessable Entity response.
func (e *APIError) IsValidationError() bool {
return e.StatusCode == 422
}