forked from TrueCloudLab/lego
105 lines
2.5 KiB
Go
105 lines
2.5 KiB
Go
package govultr
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
// BackupService is the interface to interact with the backup endpoint on the Vultr API
|
|
// Link: https://www.vultr.com/api/#backup
|
|
type BackupService interface {
|
|
List(ctx context.Context) ([]Backup, error)
|
|
Get(ctx context.Context, backupID string) (*Backup, error)
|
|
ListBySub(ctx context.Context, subID string) ([]Backup, error)
|
|
}
|
|
|
|
// BackupServiceHandler handles interaction with the backup methods for the Vultr API
|
|
type BackupServiceHandler struct {
|
|
client *Client
|
|
}
|
|
|
|
// Backup represents a Vultr backup
|
|
type Backup struct {
|
|
BackupID string `json:"BACKUPID"`
|
|
DateCreated string `json:"date_created"`
|
|
Description string `json:"description"`
|
|
Size string `json:"size"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
// List retrieves a list of all backups on the current account
|
|
func (b *BackupServiceHandler) List(ctx context.Context) ([]Backup, error) {
|
|
uri := "/v1/backup/list"
|
|
req, err := b.client.NewRequest(ctx, http.MethodGet, uri, nil)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
backupsMap := make(map[string]Backup)
|
|
err = b.client.DoWithContext(ctx, req, &backupsMap)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var backups []Backup
|
|
for _, backup := range backupsMap {
|
|
backups = append(backups, backup)
|
|
}
|
|
|
|
return backups, nil
|
|
}
|
|
|
|
// Get retrieves a backup that matches the given backupID
|
|
func (b *BackupServiceHandler) Get(ctx context.Context, backupID string) (*Backup, error) {
|
|
uri := "/v1/backup/list"
|
|
req, err := b.client.NewRequest(ctx, http.MethodGet, uri, nil)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
q.Add("BACKUPID", backupID)
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
backupsMap := make(map[string]Backup)
|
|
err = b.client.DoWithContext(ctx, req, &backupsMap)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
backup := new(Backup)
|
|
for _, bk := range backupsMap {
|
|
backup = &bk
|
|
}
|
|
|
|
return backup, nil
|
|
}
|
|
|
|
// ListBySub retrieves a list of all backups on the current account that match the given subID
|
|
func (b *BackupServiceHandler) ListBySub(ctx context.Context, subID string) ([]Backup, error) {
|
|
uri := "/v1/backup/list"
|
|
req, err := b.client.NewRequest(ctx, http.MethodGet, uri, nil)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
q.Add("SUBID", subID)
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
backupsMap := make(map[string]Backup)
|
|
err = b.client.DoWithContext(ctx, req, &backupsMap)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var backups []Backup
|
|
for _, backup := range backupsMap {
|
|
backups = append(backups, backup)
|
|
}
|
|
|
|
return backups, nil
|
|
}
|