Идентификатор пакета, который вы используете, - это ежемесячный заказ голого металла.Я предлагаю вам использовать другой packageId, например 200, это для заказа чистого металла каждый час с использованием предустановок.
Чтобы определить, какие предметы имеют почасовую цену, вам нужно проверить, существует ли атрибут ¨hourlyRecurringFee¨ и он не равен нулю.
https://api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/200/getItemPrices
Например, следующая цена товара имеет почасовую оценку, потому что существует ourhourlyRecurringFee¨.
{
"currentPriceFlag": null,
"hourlyRecurringFee": ".191",
"id": 52227,
"itemId": 4578,
"laborFee": "0",
"locationGroupId": 507,
"onSaleFlag": null,
"oneTimeFee": "0",
"quantity": null,
"recurringFee": "127",
"setupFee": "0",
"sort": 0,
"tierMinimumThreshold": null,
"item": {
"capacity": "3.5",
"description": "Single Intel Xeon E3-1270 v3 (4 Cores, 3.50 GHz)",
"id": 4578,
"itemTaxCategoryId": 166,
"keyName": "INTEL_SINGLE_XEON_1270_3_50",
"softwareDescriptionId": null,
"units": "GHz",
"upgradeItemId": null
}
},
Ниже приведен пример заказа нового чистого металла каждый час.
/*
Order a new server with preset configuration.
The presets used to simplify ordering by eliminating the need for price ids when submitting orders.
Also when the order contains a preset id, it is not possible to configure VLANs in the order.
Important manual pages:
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware_Server
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
*/
package main
import (
"fmt"
"github.com/softlayer/softlayer-go/datatypes"
"github.com/softlayer/softlayer-go/sl"
"github.com/softlayer/softlayer-go/session"
"github.com/softlayer/softlayer-go/services"
"encoding/json"
)
func main() {
// SoftLayer API username and key
username := "set me"
apikey := "set me"
// Declare the hostname, domain, location, packageId and quantity for the
// storage you wish to order
complexType := "SoftLayer_Container_Product_Order_Hardware_Server"
quantity := 1
location := "DALLAS13"
packageId := 200 // Bare Metal Servers
hostname := "softlayer"
domain := "example.com"
presetId := 149 // "Dual Xeon 2620v4, 64GB Ram, 2x1TB SATA disks, RAID1"
// Build a skeleton SoftLayer_Hardware_Server object to model the hostname and domain
// of server. If you set quantity greater than 1 then you need to define hostname/domain
// per server you wish to order.
hardware := []datatypes.Hardware{
{
Hostname: sl.String(hostname),
Domain: sl.String(domain),
PrimaryNetworkComponent : &datatypes.Network_Component{
NetworkVlan: &datatypes.Network_Vlan{
Id: sl.Int(11111),
},
},
PrimaryBackendNetworkComponent : &datatypes.Network_Component{
NetworkVlan: &datatypes.Network_Vlan{
Id: sl.Int(22222),
},
},
},
}
// Build a skeleton SoftLayer_Product_Item_Price objects. To get the list of valid
// prices for the package use the SoftLayer_Product_Package:getItems method
prices := []datatypes.Product_Item_Price{
{ Id: sl.Int( 1800 ) }, // 0 GB Bandwidth Allotment
{ Id: sl.Int( 45510 ) }, // CentOS 7.x - Minimal Install (64 bit)
{ Id: sl.Int( 273 ) }, // "100 Mbps Public & Private Network Uplinks"
{ Id: sl.Int( 177695) }, // "Redundant Power Supply"
{ Id: sl.Int( 21 ) }, // 1 IP Addresses
{ Id: sl.Int( 906 ) }, // Reboot / KVM over IP
{ Id: sl.Int( 420 ) }, // Unlimited SSL VPN Users & 1 PPTP VPN User per account
// Reboot / KVM over IP
}
// Build a skeleton SoftLayer_Container_Product_Order object containing
// the order you wish to place.
orderTemplate := datatypes.Container_Product_Order{
ComplexType: sl.String(complexType),
Quantity: sl.Int(quantity),
Location: sl.String(location),
PackageId: sl.Int(packageId),
Hardware: hardware,
Prices: prices,
PresetId: sl.Int(presetId),
}
// Create SoftLayer API session
sess := session.New(username, apikey)
// Get SoftLayer_Product_Order service
service := services.GetProductOrderService(sess)
// Use verifyOrder() method to check for errors. Replace this with placeOrder() when
// you are ready to order.
receipt, err := service.VerifyOrder(&orderTemplate)
if err != nil {
fmt.Printf("\n Unable to place order:\n - %s\n", err)
return
}
// Following helps to print the result in json format.
jsonFormat, jsonErr := json.MarshalIndent(receipt, "", " ")
if jsonErr != nil {
fmt.Println(jsonErr)
return
}
fmt.Println(string(jsonFormat))
}
В пресетах содержатся те же данные, что и на портале управления, см. Изображение ниже.
Для получения presetId вы можете использоватьследующие остальные API:
Метод: GET
https://[username]:[apiKey]@api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/200/getActivePresets?objectMask=mask[prices[id,hourlyRecurringFee,item]]
Ответ будет аналогичен приведенному ниже примеру:
{
"description": "Dual Xeon 2620v4, 64GB Ram, 2x1TB SATA disks, RAID1",
"id": 149,
"isActive": "1",
"keyName": "D2620V4_64GB_2X1TB_SATA_RAID_1",
"name": "D2620v4 64GB 2X1TB SATA RAID 1",
"packageId": 200,
"prices": [
{
"hourlyRecurringFee": ".399",
"id": 176647,
"item": {
"capacity": "2.1",
"description": "Dual Intel Xeon E5-2620 v4 (16 Cores, 2.10 GHz)",
"id": 8123,
"itemTaxCategoryId": 166,
"keyName": "INTEL_INTEL_XEON_E52620_V4_2_10",
"softwareDescriptionId": null,
"units": "GHz",
"upgradeItemId": null,
"itemCategory": {
"categoryCode": "server",
"id": 1,
"name": "Server",
"quantityLimit": 20,
"sortOrder": 2
},
"totalPhysicalCoreCapacity": 16,
"totalPhysicalCoreCount": 16
}
},
Я предлагаю вам сравнить предустановленные детали, которыевы выбираете между контрольным порталом и предустановкой, полученной в этом ответе.
Чтобы получить цены на остальные элементы, вы можете использовать следующие остальные API:
Метод: GET
https://[username]:[apiKey]@api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/200/getItemPrices?objectMask=mask[pricingLocationGroup[locations]]
Поиск цены товара по выбранному вами местоположению.