111 lines
3.0 KiB
Go
111 lines
3.0 KiB
Go
package oneandone
|
|
|
|
import (
|
|
"net/http"
|
|
)
|
|
|
|
type Image struct {
|
|
idField
|
|
ImageConfig
|
|
MinHddSize int `json:"min_hdd_size"`
|
|
Architecture *int `json:"os_architecture"`
|
|
CloudPanelId string `json:"cloudpanel_id,omitempty"`
|
|
CreationDate string `json:"creation_date,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
OsImageType string `json:"os_image_type,omitempty"`
|
|
OsFamily string `json:"os_family,omitempty"`
|
|
Os string `json:"os,omitempty"`
|
|
OsVersion string `json:"os_version,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
Licenses []License `json:"licenses,omitempty"`
|
|
Hdds []Hdd `json:"hdds,omitempty"`
|
|
Datacenter *Datacenter `json:"datacenter,omitempty"`
|
|
ApiPtr
|
|
}
|
|
|
|
type ImageConfig struct {
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Frequency string `json:"frequency,omitempty"`
|
|
ServerId string `json:"server_id,omitempty"`
|
|
NumImages int `json:"num_images"`
|
|
}
|
|
|
|
// GET /images
|
|
func (api *API) ListImages(args ...interface{}) ([]Image, error) {
|
|
url, err := processQueryParams(createUrl(api, imagePathSegment), args...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := []Image{}
|
|
err = api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index, _ := range result {
|
|
result[index].api = api
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// POST /images
|
|
func (api *API) CreateImage(request *ImageConfig) (string, *Image, error) {
|
|
res := new(Image)
|
|
url := createUrl(api, imagePathSegment)
|
|
err := api.Client.Post(url, &request, &res, http.StatusAccepted)
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
res.api = api
|
|
return res.Id, res, nil
|
|
}
|
|
|
|
// GET /images/{id}
|
|
func (api *API) GetImage(img_id string) (*Image, error) {
|
|
result := new(Image)
|
|
url := createUrl(api, imagePathSegment, img_id)
|
|
err := api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// DELETE /images/{id}
|
|
func (api *API) DeleteImage(img_id string) (*Image, error) {
|
|
result := new(Image)
|
|
url := createUrl(api, imagePathSegment, img_id)
|
|
err := api.Client.Delete(url, nil, &result, http.StatusAccepted)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// PUT /images/{id}
|
|
func (api *API) UpdateImage(img_id string, new_name string, new_desc string, new_freq string) (*Image, error) {
|
|
result := new(Image)
|
|
req := struct {
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Frequency string `json:"frequency,omitempty"`
|
|
}{Name: new_name, Description: new_desc, Frequency: new_freq}
|
|
url := createUrl(api, imagePathSegment, img_id)
|
|
err := api.Client.Put(url, &req, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
func (im *Image) GetState() (string, error) {
|
|
in, err := im.api.GetImage(im.Id)
|
|
if in == nil {
|
|
return "", err
|
|
}
|
|
return in.State, err
|
|
}
|