Какой пакет выбрать для заказа ежечасного чистого металла в DAL13 с VLAN также на входе? - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь заказать ежечасный голый металл в Dal13.Я должен дать vlans также в качестве входных данных, поэтому я использую Product_Order для заказа.Я пытался использовать packageId 253, но я получаю сообщение об ошибке для itemId 50635, недоступного для почасового заказа.

Выбираю ли я правильные идентификаторы товара для пакета и цены?

 prices := []datatypes.Product_Item_Price{ // for package 253 in DAL13
    {Id: sl.Int(50635)},  //INTEL_XEON_2620_2_40 --50635
    {Id: sl.Int(37652)},  
    {Id: sl.Int(49427)},  
    {Id: sl.Int(141957)}, 
    {Id: sl.Int(49761)},  
    {Id: sl.Int(49761)},
    {Id: sl.Int(49761)},
    {Id: sl.Int(35686)},
    {Id: sl.Int(80397)},
    {Id: sl.Int(50359)},
    {Id: sl.Int(34807)},
    {Id: sl.Int(25014)},
    {Id: sl.Int(33483)},
    {Id: sl.Int(34241)},
    {Id: sl.Int(32500)},
    {Id: sl.Int(32627)},
    {Id: sl.Int(35310)},
 }

1 Ответ

0 голосов
/ 12 октября 2018

Идентификатор пакета, который вы используете, - это ежемесячный заказ голого металла.Я предлагаю вам использовать другой 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))
}

В пресетах содержатся те же данные, что и на портале управления, см. Изображение ниже.

enter image description here

Для получения 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]] 

Поиск цены товара по выбранному вами местоположению.

...