forked from TrueCloudLab/lego
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package govultr
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
// ApplicationService is the interface to interact with the Application endpoint on the Vultr API
|
|
// Link: https://www.vultr.com/api/#app
|
|
type ApplicationService interface {
|
|
List(ctx context.Context) ([]Application, error)
|
|
}
|
|
|
|
// ApplicationServiceHandler handles interaction with the application methods for the Vultr API
|
|
type ApplicationServiceHandler struct {
|
|
client *Client
|
|
}
|
|
|
|
// Application represents a Vultr application
|
|
type Application struct {
|
|
AppID string `json:"APPID"`
|
|
Name string `json:"name"`
|
|
ShortName string `json:"short_name"`
|
|
DeployName string `json:"deploy_name"`
|
|
Surcharge float64 `json:"surcharge"`
|
|
}
|
|
|
|
// List retrieves a list of available applications that can be launched when creating a Vultr VPS
|
|
func (a *ApplicationServiceHandler) List(ctx context.Context) ([]Application, error) {
|
|
|
|
uri := "/v1/app/list"
|
|
req, err := a.client.NewRequest(ctx, http.MethodGet, uri, nil)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
appsMap := make(map[string]Application)
|
|
|
|
err = a.client.DoWithContext(ctx, req, &appsMap)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var apps []Application
|
|
for _, app := range appsMap {
|
|
apps = append(apps, app)
|
|
}
|
|
|
|
return apps, nil
|
|
}
|