mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
Switch to official Vultr API library (#529)
* vultr: Switched to official API library (closes #528) * vultr: Renamed vultr.VultrApi to vultr.Provider * vendor: Updated govultr
This commit is contained in:
committed by
Craig Peterson
parent
a138b12ec2
commit
44a7ba5711
168
vendor/github.com/vultr/govultr/snapshot.go
generated
vendored
Normal file
168
vendor/github.com/vultr/govultr/snapshot.go
generated
vendored
Normal file
@@ -0,0 +1,168 @@
|
||||
package govultr
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// SnapshotService is the interface to interact with Snapshot endpoints on the Vultr API
|
||||
// Link: https://www.vultr.com/api/#snapshot
|
||||
type SnapshotService interface {
|
||||
Create(ctx context.Context, InstanceID, description string) (*Snapshot, error)
|
||||
CreateFromURL(ctx context.Context, snapshotURL string) (*Snapshot, error)
|
||||
Delete(ctx context.Context, snapshotID string) error
|
||||
List(ctx context.Context) ([]Snapshot, error)
|
||||
Get(ctx context.Context, snapshotID string) (*Snapshot, error)
|
||||
}
|
||||
|
||||
// SnapshotServiceHandler handles interaction with the snapshot methods for the Vultr API
|
||||
type SnapshotServiceHandler struct {
|
||||
Client *Client
|
||||
}
|
||||
|
||||
// Snapshot represents a Vultr snapshot
|
||||
type Snapshot struct {
|
||||
SnapshotID string `json:"SNAPSHOTID"`
|
||||
DateCreated string `json:"date_created"`
|
||||
Description string `json:"description"`
|
||||
Size string `json:"size"`
|
||||
Status string `json:"status"`
|
||||
OsID string `json:"OSID"`
|
||||
AppID string `json:"APPID"`
|
||||
}
|
||||
|
||||
// Snapshots represent a collection of snapshots
|
||||
type Snapshots []Snapshot
|
||||
|
||||
// Create makes a snapshot of a provided server
|
||||
func (s *SnapshotServiceHandler) Create(ctx context.Context, InstanceID, description string) (*Snapshot, error) {
|
||||
|
||||
uri := "/v1/snapshot/create"
|
||||
|
||||
values := url.Values{
|
||||
"SUBID": {InstanceID},
|
||||
"description": {description},
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, http.MethodPost, uri, values)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
snapshot := new(Snapshot)
|
||||
err = s.Client.DoWithContext(ctx, req, snapshot)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
snapshot.Description = description
|
||||
return snapshot, nil
|
||||
}
|
||||
|
||||
// CreateFromURL will create a snapshot based on an image iso from a URL you provide
|
||||
func (s *SnapshotServiceHandler) CreateFromURL(ctx context.Context, snapshotURL string) (*Snapshot, error) {
|
||||
uri := "/v1/snapshot/create_from_url"
|
||||
|
||||
values := url.Values{
|
||||
"url": {snapshotURL},
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, http.MethodPost, uri, values)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
snapshot := new(Snapshot)
|
||||
err = s.Client.DoWithContext(ctx, req, snapshot)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return snapshot, nil
|
||||
}
|
||||
|
||||
// Delete a snapshot based on snapshotID
|
||||
func (s *SnapshotServiceHandler) Delete(ctx context.Context, snapshotID string) error {
|
||||
uri := "/v1/snapshot/destroy"
|
||||
|
||||
values := url.Values{
|
||||
"SNAPSHOTID": {snapshotID},
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, http.MethodPost, uri, values)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = s.Client.DoWithContext(ctx, req, nil)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// List of snapshots details
|
||||
func (s *SnapshotServiceHandler) List(ctx context.Context) ([]Snapshot, error) {
|
||||
uri := "/v1/snapshot/list"
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, http.MethodGet, uri, nil)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
snapshotMap := make(map[string]Snapshot)
|
||||
err = s.Client.DoWithContext(ctx, req, &snapshotMap)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var snapshots []Snapshot
|
||||
|
||||
for _, s := range snapshotMap {
|
||||
snapshots = append(snapshots, s)
|
||||
}
|
||||
|
||||
return snapshots, nil
|
||||
}
|
||||
|
||||
// Get individual details of a snapshot based on snapshotID
|
||||
func (s *SnapshotServiceHandler) Get(ctx context.Context, snapshotID string) (*Snapshot, error) {
|
||||
uri := "/v1/snapshot/list"
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, http.MethodGet, uri, nil)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if snapshotID != "" {
|
||||
q := req.URL.Query()
|
||||
q.Add("SNAPSHOTID", snapshotID)
|
||||
req.URL.RawQuery = q.Encode()
|
||||
}
|
||||
|
||||
snapshotMap := make(map[string]Snapshot)
|
||||
err = s.Client.DoWithContext(ctx, req, &snapshotMap)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
snapshot := new(Snapshot)
|
||||
|
||||
for _, s := range snapshotMap {
|
||||
snapshot = &s
|
||||
}
|
||||
|
||||
return snapshot, nil
|
||||
}
|
Reference in New Issue
Block a user