71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/sacloud/libsacloud/sacloud"
|
|
"strconv"
|
|
)
|
|
|
|
// ProductServerAPI サーバープランAPI
|
|
type ProductServerAPI struct {
|
|
*baseAPI
|
|
}
|
|
|
|
// NewProductServerAPI サーバープランAPI作成
|
|
func NewProductServerAPI(client *Client) *ProductServerAPI {
|
|
return &ProductServerAPI{
|
|
&baseAPI{
|
|
client: client,
|
|
// FuncGetResourceURL
|
|
FuncGetResourceURL: func() string {
|
|
return "product/server"
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (api *ProductServerAPI) getPlanIDBySpec(core int, memGB int) (int64, error) {
|
|
//assert args
|
|
if core <= 0 {
|
|
return -1, fmt.Errorf("Invalid Parameter: CPU Core")
|
|
}
|
|
if memGB <= 0 {
|
|
return -1, fmt.Errorf("Invalid Parameter: Memory Size(GB)")
|
|
}
|
|
|
|
return strconv.ParseInt(fmt.Sprintf("%d%03d", memGB, core), 10, 64)
|
|
}
|
|
|
|
// IsValidPlan 指定のコア数/メモリサイズのプランが存在し、有効であるか判定
|
|
func (api *ProductServerAPI) IsValidPlan(core int, memGB int) (bool, error) {
|
|
|
|
planID, err := api.getPlanIDBySpec(core, memGB)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
productServer, err := api.Read(planID)
|
|
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
if productServer != nil {
|
|
return true, nil
|
|
}
|
|
|
|
return false, fmt.Errorf("Server Plan[%d] Not Found", planID)
|
|
|
|
}
|
|
|
|
// GetBySpec 指定のコア数/メモリサイズのサーバープランを取得
|
|
func (api *ProductServerAPI) GetBySpec(core int, memGB int) (*sacloud.ProductServer, error) {
|
|
planID, err := api.getPlanIDBySpec(core, memGB)
|
|
|
|
productServer, err := api.Read(planID)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return productServer, nil
|
|
}
|