435c0d9fc8
This PR switches the Nomad repository from using govendor to Go modules for managing dependencies. Aspects of the Nomad workflow remain pretty much the same. The usual Makefile targets should continue to work as they always did. The API submodule simply defers to the parent Nomad version on the repository, keeping the semantics of API versioning that currently exists.
118 lines
2.6 KiB
Go
118 lines
2.6 KiB
Go
package packngo
|
|
|
|
const planBasePath = "/plans"
|
|
|
|
// PlanService interface defines available plan methods
|
|
type PlanService interface {
|
|
List() ([]Plan, *Response, error)
|
|
}
|
|
|
|
type planRoot struct {
|
|
Plans []Plan `json:"plans"`
|
|
}
|
|
|
|
// Plan represents a Packet service plan
|
|
type Plan struct {
|
|
ID string `json:"id"`
|
|
Slug string `json:"slug,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Line string `json:"line,omitempty"`
|
|
Specs *Specs `json:"specs,omitempty"`
|
|
Pricing *Pricing `json:"pricing,omitempty"`
|
|
}
|
|
|
|
func (p Plan) String() string {
|
|
return Stringify(p)
|
|
}
|
|
|
|
// Specs - the server specs for a plan
|
|
type Specs struct {
|
|
Cpus []*Cpus `json:"cpus,omitempty"`
|
|
Memory *Memory `json:"memory,omitempty"`
|
|
Drives []*Drives `json:"drives,omitempty"`
|
|
Nics []*Nics `json:"nics,omitempty"`
|
|
Features *Features `json:"features,omitempty"`
|
|
}
|
|
|
|
func (s Specs) String() string {
|
|
return Stringify(s)
|
|
}
|
|
|
|
// Cpus - the CPU config details for specs on a plan
|
|
type Cpus struct {
|
|
Count int `json:"count,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
|
|
func (c Cpus) String() string {
|
|
return Stringify(c)
|
|
}
|
|
|
|
// Memory - the RAM config details for specs on a plan
|
|
type Memory struct {
|
|
Total string `json:"total,omitempty"`
|
|
}
|
|
|
|
func (m Memory) String() string {
|
|
return Stringify(m)
|
|
}
|
|
|
|
// Drives - the storage config details for specs on a plan
|
|
type Drives struct {
|
|
Count int `json:"count,omitempty"`
|
|
Size string `json:"size,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
|
|
func (d Drives) String() string {
|
|
return Stringify(d)
|
|
}
|
|
|
|
// Nics - the network hardware details for specs on a plan
|
|
type Nics struct {
|
|
Count int `json:"count,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
|
|
func (n Nics) String() string {
|
|
return Stringify(n)
|
|
}
|
|
|
|
// Features - other features in the specs for a plan
|
|
type Features struct {
|
|
Raid bool `json:"raid,omitempty"`
|
|
Txt bool `json:"txt,omitempty"`
|
|
}
|
|
|
|
func (f Features) String() string {
|
|
return Stringify(f)
|
|
}
|
|
|
|
// Pricing - the pricing options on a plan
|
|
type Pricing struct {
|
|
Hourly float32 `json:"hourly,omitempty"`
|
|
Monthly float32 `json:"monthly,omitempty"`
|
|
}
|
|
|
|
func (p Pricing) String() string {
|
|
return Stringify(p)
|
|
}
|
|
|
|
// PlanServiceOp implements PlanService
|
|
type PlanServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
// List method returns all available plans
|
|
func (s *PlanServiceOp) List() ([]Plan, *Response, error) {
|
|
root := new(planRoot)
|
|
|
|
resp, err := s.client.DoRequest("GET", planBasePath, nil, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Plans, resp, err
|
|
}
|