API SoftLayer: как получить почасовые предустановленные цены на серверы для всех возможных locationGroupId

Почасовой сервер «голый металл» Softlayer_Product_Package 200 имеет предустановки.

Я пытаюсь получить цены на товары для каждого пресета для всех мест.

Если я использую следующий запрос
https: // $ apiuser: [email protected]/rest/v3/SoftLayer_Product_Package/200/getActivePresets.json objectMask = маска
[id, packageId, описание, имя, keyName, configuration.category, configuration.price]

он возвращает только «стандартные» цены для «locationGroupId» = null.

Как я могу получить цены для всех местоположений, разные цены для разных значений loationGroupId, из «SoftLayer_Product_Package_Preset», но не только для «стандартной» цены с loationGroupId = null?

Благодарю.

0

Решение

Управляющий портал выполняет некоторые внутренние процессы, чтобы получить цены для центра обработки данных, который вы в данный момент выберете для заказа сервера. К сожалению, невозможно получить всю необходимую информацию с помощью одного запроса на отдых.

Однако мы можем использовать язык программирования, поддерживаемый SoftLayer. Вы можете увидеть языки, поддерживаемые SoftLayer в:

http://sldn.softlayer.com/

Я могу предоставить следующий скрипт на python, который поможет вам получить цены для каждого центра обработки данных для каждой активной предустановленной конфигурации. Этот код можно улучшить, это всего лишь идея.

"""Get active presets and its prices per location

This script retrieves the active presets with their prices per datacenter.
Also it displays the information for hourly recurring fee and recurring fee.

Important manual pages:
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getActivePresets
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices
http://sldn.softlayer.com/search/site/object%20mask
http://sldn.softlayer.com/article/Object-Filters

@License: http://sldn.softlayer.com/article/License
@Author: SoftLayer Technologies, Inc. <[email protected]>
"""
# So we can talk to the SoftLayer API:
import SoftLayer
from prettytable import PrettyTable

# Your SoftLayer API username and key.
API_USERNAME = 'set me'
API_KEY = 'set me'
# Declare the package id
packageId = 200
# Create a client instance
client = SoftLayer.Client(username=API_USERNAME, api_key=API_KEY)
# Declare an object mask to get prices and items information
objectMask = 'mask[prices[item]]'
# Declare an object mask to get pricingLocationGroup
objectMaskPrice = 'mask[pricingLocationGroup[locations]]'
try:
# Get active presets
activePresets = client['SoftLayer_Product_Package'].getActivePresets(id=packageId, mask=objectMask)
for activePreset in activePresets:
print('**************   PRESET ID: %s   **************' % activePreset['id'])
# Configuring table's columns
x = PrettyTable(['Locations', 'Price Id', 'Item Id', 'Item Description', 'hourlyRecurringFee', 'recurringFee'])
x.padding_width = 1
print('Id: %s, Description: %s, isActive: %s' % (activePreset['id'], activePreset['description'], activePreset['isActive']))
print('        KeyName: %s, Name: %s' % (activePreset['keyName'], activePreset['name']))
for prices in activePreset['prices']:
print('                 Price Id: %s, Item Id: %s Item Description: %s' % (prices['id'], prices['item']['id'], prices['item']['description']))
objectFilterItem = {'itemPrices':{'item':{'id':{'operation':prices['item']['id']}}}}
prices = client['SoftLayer_Product_Package'].getItemPrices(id=200, filter=objectFilterItem, mask=objectMaskPrice)
for price in prices:
locationDisplay = ''
recurringFee = 0
# Verifying if the price has pricingLocationGroup
if 'pricingLocationGroup' in price:
for location in price['pricingLocationGroup']['locations']:
locationDisplay = locationDisplay + ' ' + location['longName']
else:
locationDisplay = 'STANDARD PRICE'
# Verifying if the price has Recurring Fee
if 'recurringFee' in price:
recurringFee = price['recurringFee']
else:
recurringFee = 'null'
x.add_row([locationDisplay, price['id'], price['item']['id'], price['item']['description'], price['hourlyRecurringFee'], recurringFee])
print(x)
except SoftLayer.SoftLayerAPIError as e:
print('Unable to get active presets faultCode=%s, faultString=%s' % (e.faultCode, e.faultString))
exit(1)

Я надеюсь это тебе поможет.

Дайте мне знать любое сомнение или комментарий об этом

0

Другие решения

Я получил те же значения при выполнении SoftLayer_Product_Package :: getActivePresets (я имею в виду: «locationGroupId» = null).

Но после просмотра конфигураций заказа для быстрых серверов я вижу, что предустановки — это заранее установленные / фиксированные конфигурации, и это, вероятно, является причиной того, что цены товаров, отображаемые с помощью «getActivePresets», не имеют мест для выбора. Эти идентификаторы цен с locationGroupId = null считаются «стандартной ценой», и API будет внутренне переключать цены для клиента. Но сначала рекомендуется выполнить сначала команду verifyOrder, чтобы проверить, в порядке ли требуемый заказ (плата может варьироваться).

Например, при выполнении следующего запроса:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Product_Package/200/getActivePresets.json?objectMask=mask [id,description,keyName,configuration.category, configuration.price,prices]

Получаем заранее установленные цены (Пакет: 200, Предустановка: 66):

* Item prices: Disk Controller (NoRAID)  -- > price id: 32927
* server ("Single Intel Xeon E3-1270 v3 (4 Cores, 3.50 GHz)") --> price id: 37318
* RAM ("32 GB RAM") --> price id: 37360
* disk0 (“960 GB SSD (3 DWPD)”) --> price id: 50407
*disk1 ("960 GB SSD (3 DWPD)”) --> price id: 50407

Внутренне, API будет соответствовать этим ценам и выбранному местоположению клиентом.
Местоположения, которые могут совпадать с этими ценами, это старые местоположения, например: dal01, ams01, dal07 dal06, sng01, hou02, wdc01, SJC01.

Но вышеупомянутые цены не единственные пункты, чтобы настроить для почасового быстрого сервера. Например, для этого заказа нам нужно больше элементов для настройки:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Product_Order/verifyOrder

{
"parameters": [
{
"complexType": "SoftLayer_Container_Product_Order_Hardware_Server",
"quantity": 1,
"location": "SANJOSE",
"packageId": 200,
"useHourlyPricing": 1,
"presetId": 66,
"prices": [
{
"id": 37318        # Single Intel Xeon E3-1270 v3 (4 Cores, 3.50 GHz)
},
{
"id": 37360        # "32 GB RAM
},
{
"id": 44992        # "CentOS 7.x (64 bit)"},
{
"id": 32927        # "Non-RAID  Non-RAID"},
{
"id": 50407        # disk0 - 960 GB SSD (3 DWPD)
},
{
"id": 50407        # disk1 - 960 GB SSD (3 DWPD)
},
{
"id": 34183        # "0 GB Bandwidth"},
{
"id": 26737        # "100 Mbps Public & Private Network Uplinks"},
{
"id": 33483        # "Unlimited SSL VPN Users & 1 PPTP VPN User per account"},
{
"id": 34807        # "1 IP Address"},
{
"id": 25014        # "Reboot / KVM over IP"}
],
"hardware": [
{
"hostname": "myhostname",
"domain": "mydomain.com"}
]
}
]
}

Чтобы получить эти цены товара, мы можем использовать следующее:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Product_Package/200/getItemPrices?objectMask=mask[id,item[keyName,description],pricingLocationGroup[locations[id, name, longName]]]

В этом запросе мы видим, что некоторые элементы могут иметь «locationGroupId» <> null ”в зависимости от местоположения

Рекомендации:

http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getAllObjects
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package
http://sldn.softlayer.com/blog/cmporter/Location-based-Pricing-and-You

РЕДАКТИРОВАТЬ

Количество серверов быстрого предоставления в каждом центре обработки данных ограничено. Даже если мы перейдем на портал и выберем какой-либо центр обработки данных, в некоторых случаях после проверки заказа отображается ошибка, т.е.

В настоящее время нет аппаратного обеспечения для пакета № 200 с предустановкой
Конфигурация № 66 во Франкфурте 2. Пожалуйста, выберите другой
Дата центр.

Это означает, что в этом месте недостаточно оборудования для заказа. Похоже, что заказы на доступность для серверов быстрого предоставления находятся всего в нескольких центрах обработки данных, по этой причине у них нет определенной группы местоположений. Например, если мы выполним следующий запрос, чтобы узнать доступные цены группы местоположений, мы увидим, что в каждой группе имеется более 1 местоположения, и, возможно, заказ на быстрое предоставление доступен только для одного из этих центров обработки данных (другие заказы не принимаются эти ДК).

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Location_Group_Pricing/getAllObjects?objectMask=mask[locations]

Когда клиенты, которые используют серверы FastProvision и отменяют их, они возвращаются в доступный пул и снова становятся «заказанными».

На данный момент такие заказы работают по «стандартным ценам».

1

Чтобы получить цены на предустановленный заказ, такой как портал, вам нужно использовать другие методы:

Этот метод даст вам доступные серверы, их пресеты (если есть) и цены, как на портале.
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package_Server/getAllObjects

Но цены стандартные, для того, чтобы получить цены для конкретного места, нужно использовать следующие методы: http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices или http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItems

они вернут все цены для каждого местоположения.

Метод getActivePresets может помочь вам узнать, какие элементы находятся в предустановке, а с помощью других методов вы можете получить цену для определенного местоположения.

С уважением

0
По вопросам рекламы [email protected]