dnscontrol/vendor/github.com/vultr/govultr/iso.go
Patrick Gaskin 44a7ba5711 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
2019-07-15 10:31:55 -04:00

142 lines
2.9 KiB
Go

package govultr
import (
"context"
"net/http"
"net/url"
"strconv"
)
// ISOService is the interface to interact with the ISO endpoints on the Vultr API
// Link: https://www.vultr.com/api/#ISO
type ISOService interface {
CreateFromURL(ctx context.Context, ISOURL string) (*ISO, error)
Delete(ctx context.Context, ISOID int) error
List(ctx context.Context) ([]ISO, error)
GetPublicList(ctx context.Context) ([]PublicISO, error)
}
// ISOServiceHandler handles interaction with the ISO methods for the Vultr API
type ISOServiceHandler struct {
Client *Client
}
// ISO represents ISOs currently available on this account.
type ISO struct {
ISOID int `json:"ISOID"`
DateCreated string `json:"date_created"`
FileName string `json:"filename"`
Size int `json:"size"`
MD5Sum string `json:"md5sum"`
SHA512Sum string `json:"sha512sum"`
Status string `json:"status"`
}
// PublicISO represents public ISOs offered in the Vultr ISO library.
type PublicISO struct {
ISOID int `json:"ISOID"`
Name string `json:"name"`
Description string `json:"description"`
}
// CreateFromURL will create a new ISO image on your account
func (i *ISOServiceHandler) CreateFromURL(ctx context.Context, ISOURL string) (*ISO, error) {
uri := "/v1/iso/create_from_url"
values := url.Values{
"url": {ISOURL},
}
req, err := i.Client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return nil, err
}
iso := new(ISO)
err = i.Client.DoWithContext(ctx, req, iso)
if err != nil {
return nil, err
}
return iso, nil
}
// Delete will delete an ISO image from your account
func (i *ISOServiceHandler) Delete(ctx context.Context, isoID int) error {
uri := "/v1/iso/destroy"
values := url.Values{
"ISOID": {strconv.Itoa(isoID)},
}
req, err := i.Client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return err
}
err = i.Client.DoWithContext(ctx, req, nil)
if err != nil {
return err
}
return nil
}
// List will list all ISOs currently available on your account
func (i *ISOServiceHandler) List(ctx context.Context) ([]ISO, error) {
uri := "/v1/iso/list"
req, err := i.Client.NewRequest(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, err
}
var ISOMap map[string]ISO
err = i.Client.DoWithContext(ctx, req, &ISOMap)
if err != nil {
return nil, err
}
var iso []ISO
for _, i := range ISOMap {
iso = append(iso, i)
}
return iso, nil
}
// GetPublicList will list public ISOs offered in the Vultr ISO library.
func (i *ISOServiceHandler) GetPublicList(ctx context.Context) ([]PublicISO, error) {
uri := "/v1/iso/list_public"
req, err := i.Client.NewRequest(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, err
}
var ISOMap map[string]PublicISO
err = i.Client.DoWithContext(ctx, req, &ISOMap)
if err != nil {
return nil, err
}
var publicISO []PublicISO
for _, p := range ISOMap {
publicISO = append(publicISO, p)
}
return publicISO, nil
}