89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package linodego
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// LinodeType represents a linode type object
|
|
type LinodeType struct {
|
|
ID string `json:"id"`
|
|
Disk int `json:"disk"`
|
|
Class LinodeTypeClass `json:"class"` // enum: nanode, standard, highmem
|
|
Price *LinodePrice `json:"price"`
|
|
Label string `json:"label"`
|
|
Addons *LinodeAddons `json:"addons"`
|
|
NetworkOut int `json:"network_out"`
|
|
Memory int `json:"memory"`
|
|
Transfer int `json:"transfer"`
|
|
VCPUs int `json:"vcpus"`
|
|
}
|
|
|
|
// LinodePrice represents a linode type price object
|
|
type LinodePrice struct {
|
|
Hourly float32 `json:"hourly"`
|
|
Monthly float32 `json:"monthly"`
|
|
}
|
|
|
|
// LinodeBackupsAddon represents a linode backups addon object
|
|
type LinodeBackupsAddon struct {
|
|
Price *LinodePrice `json:"price"`
|
|
}
|
|
|
|
// LinodeAddons represent the linode addons object
|
|
type LinodeAddons struct {
|
|
Backups *LinodeBackupsAddon `json:"backups"`
|
|
}
|
|
|
|
// LinodeTypeClass constants start with Class and include Linode API Instance Type Classes
|
|
type LinodeTypeClass string
|
|
|
|
// LinodeTypeClass contants are the Instance Type Classes that an Instance Type can be assigned
|
|
const (
|
|
ClassNanode LinodeTypeClass = "nanode"
|
|
ClassStandard LinodeTypeClass = "standard"
|
|
ClassHighmem LinodeTypeClass = "highmem"
|
|
)
|
|
|
|
// LinodeTypesPagedResponse represents a linode types API response for listing
|
|
type LinodeTypesPagedResponse struct {
|
|
*PageOptions
|
|
Data []LinodeType `json:"data"`
|
|
}
|
|
|
|
func (LinodeTypesPagedResponse) endpoint(c *Client) string {
|
|
endpoint, err := c.Types.Endpoint()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return endpoint
|
|
}
|
|
|
|
func (resp *LinodeTypesPagedResponse) appendData(r *LinodeTypesPagedResponse) {
|
|
resp.Data = append(resp.Data, r.Data...)
|
|
}
|
|
|
|
// ListTypes lists linode types
|
|
func (c *Client) ListTypes(ctx context.Context, opts *ListOptions) ([]LinodeType, error) {
|
|
response := LinodeTypesPagedResponse{}
|
|
err := c.listHelper(ctx, &response, opts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return response.Data, nil
|
|
}
|
|
|
|
// GetType gets the type with the provided ID
|
|
func (c *Client) GetType(ctx context.Context, typeID string) (*LinodeType, error) {
|
|
e, err := c.Types.Endpoint()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
e = fmt.Sprintf("%s/%s", e, typeID)
|
|
|
|
r, err := coupleAPIErrors(c.Types.R(ctx).Get(e))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return r.Result().(*LinodeType), nil
|
|
}
|