Параметры фильтра для проверки POST и размещения заказа на хранение Performance

Я пытаюсь сделать BPM и SoftLayer интеграции с помощью клиента Java REST. При моем первоначальном анализе (а также переполнении стека формы справки) я обнаружил,

Шаг 1) мы должны получить список getPriceItem, чтобы иметь все идентификаторы для следующего запроса.

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

а затем проверьте и разместите заказ POST, используя соответствующие API.

Я застрял на Step 1) поскольку фильтрация здесь кажется немного хитрой. Я получаю ответ JSON более 20000 строк.

Я хотел показать похожие данные (как и пользовательский интерфейс хранилища SL Performance) в моем пользовательском интерфейсе BPM. (Один выпадающий список для выбора типа хранилища, 2-й для отображения местоположения, 3-й для отображения размера и 4-й для ввода-вывода), где пользователь может выбрать элементы и разместить запрос.

Здесь я обнаружил, что SL похож на это для заполнения выпадающих

https://control.softlayer.com/sales/productpackage/getregions?_dc=1456386930027&categoryCode=performance_storage_iscsi&packageId=222&page=1&start=0&limit=25

Разве мы не можем иметь реализацию, где мы можем использовать control.softlayer.com так же, как SL вместо api.softlayer.com? В этом случае мы можем использовать аналогичную логику для отображения данных в пользовательском интерфейсе.

Спасибо анупам

1 ответ

Здесь, с помощью API, выполняются шаги по хранению производительности. Для длительного хранения шаги аналогичны, вам просто нужно просмотреть значение для categoryCode и изменить, если это необходимо

Вы можете получить местоположения, используя этот метод:

http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getRegions

вам просто нужно знать пакет хранения, например

GET https://api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/222/getRegions

затем вы можете получить размер хранилища, для которого вы можете использовать методы SoftLayer_Product_Package::getItems или SoftLayer_Product_Package::getItemPrices и фильтр, например

GET https://api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/222/getItemPrices?objectFilter={"itemPrices": {"categories": {"categoryCode": {"operation": "performance_storage_space"}},"locationGroupId": { "operation": "is null"}}}

Примечание. Мы фильтруем данные, чтобы получить цены с кодом категории "performance_storage_space", и мы хотим, чтобы стандартная цена locationGroupId = null

затем вы можете получить IOPS, вы можете использовать тот же подход, что и выше, но есть зависимость между IOPS и пространством хранения, например

GET https://api.softlayer.com/rest/v3.1/SoftLayer_Product_Package/222/getItemPrices?objectFilter={"itemPrices": { "attributes": { "value": { "operation": 20 } },  "categories": { "categoryCode": {    "operation": "performance_storage_iops" } },    "locationGroupId": {    "operation": "is null" } } }

Примечание. В этом примере мы предполагаем, что выбранное место для хранения было "20", цены на IOPS имеют запись с именем atributes, эта запись сообщает нам действительные места для хранения IOPS, тогда у нас есть другие фильтры, чтобы получить только категорию цен IOPSCodeCode = performance_storage_iops и мы хотим только стандартные цены locationGroupId = null

Для выбора типа хранилища я не думаю, что есть метод, единственный способ, который я вижу, это то, что вы вызываете метод SoftLayer_Product_Package::getAllObjects и фильтруете данные, чтобы получить пакеты на выносливость, производительность и портативное хранилище.

На всякий случай вот пример использования Python-клиента Softlayer для заказа

"""
Order a block storage (performance ISCSI).

Important manual pages:
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItems
http://sldn.softlayer.com/reference/services/SoftLayer_Location
http://sldn.softlayer.com/reference/services/SoftLayer_Location/getDatacenters
http://sldn.softlayer.com/reference/services/SoftLayer_Network_Storage_Iscsi_OS_Type
http://sldn.softlayer.com/reference/services/SoftLayer_Network_Storage_Iscsi_OS_Type/getAllObjects
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Location
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order_Network_Storage_Enterprise
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
http://sldn.softlayer.com/blog/cmporter/Location-based-Pricing-and-You
http://sldn.softlayer.com/blog/bpotter/Going-Further-SoftLayer-API-Python-Client-Part-3
http://sldn.softlayer.com/article/Object-Filters
http://sldn.softlayer.com/article/Python
http://sldn.softlayer.com/article/Object-Masks

License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
"""

import SoftLayer
import json

# Values "AMS01", "AMS03", "CHE01", "DAL05", "DAL06" "FRA02", "HKG02", "LON02", etc.
location = "AMS01"

# Values "20", "40", "80", "100", etc.
storageSize = "40"

# Values between "100" and "6000" by intervals of 100.
iops = "100"

# Values "Hyper-V", "Linux", "VMWare", "Windows 2008+", "Windows GPT", "Windows 2003", "Xen"
os = "Linux"

PACKAGE_ID = 222

client = SoftLayer.Client()
productOrderService = client['SoftLayer_Product_Order']
packageService = client['SoftLayer_Product_Package']
locationService = client['SoftLayer_Location']
osService = client['SoftLayer_Network_Storage_Iscsi_OS_Type']

objectFilterDatacenter = {"name": {"operation": location.lower()}}
objectFilterStorageNfs = {"items": {"categories": {"categoryCode": {"operation": "performance_storage_iscsi"}}}}
objectFilterOsType = {"name": {"operation": os}}

try:
    # Getting the datacenter.
    datacenter = locationService.getDatacenters(filter=objectFilterDatacenter)
    # Getting the performance storage NFS prices.
    itemsStorageNfs = packageService.getItems(id=PACKAGE_ID, filter=objectFilterStorageNfs)
    # Getting the storage space prices
    objectFilter = {
        "itemPrices": {
            "item": {
                "capacity": {
                    "operation": storageSize
                }
            },
            "categories": {
                "categoryCode": {
                    "operation": "performance_storage_space"
                }
            },
            "locationGroupId": {
                "operation": "is null"
            }
        }
    }
    pricesStorageSpace = packageService.getItemPrices(id=PACKAGE_ID, filter=objectFilter)
    # If the prices list is empty that means that the storage space value is invalid.
    if len(pricesStorageSpace) == 0:
        raise ValueError('The storage space value: ' + storageSize + ' GB, is not valid.')
    # Getting the IOPS prices
    objectFilter = {
        "itemPrices": {
            "item": {
                "capacity": {
                    "operation": iops
                }
            },
            "attributes": {
                "value": {
                    "operation": storageSize
                }
            },
            "categories": {
                "categoryCode": {
                    "operation": "performance_storage_iops"
                }
            },
            "locationGroupId": {
                "operation": "is null"
            }
        }
    }
    pricesIops = packageService.getItemPrices(id=PACKAGE_ID, filter=objectFilter)
    # If the prices list is empty that means that the IOPS value is invalid for the configured storage space.
    if len(pricesIops) == 0:
        raise ValueError('The IOPS value: ' + iops + ', is not valid for the storage space: ' + storageSize + ' GB.')
    # Getting the OS.
    os = osService.getAllObjects(filter=objectFilterOsType)
    # Building the order template.
    orderData = {
        "complexType": "SoftLayer_Container_Product_Order_Network_PerformanceStorage_Iscsi",
        "packageId": PACKAGE_ID,
        "location": datacenter[0]['id'],
        "quantity": 1,
        "prices": [
            {
                "id": itemsStorageNfs[0]['prices'][0]['id']
            },
            {
                "id": pricesStorageSpace[0]['id']
            },
            {
                "id": pricesIops[0]['id']
            }
        ],
        "osFormatType": os[0]
    }
    # verifyOrder() will check your order for errors. Replace this with a call to
    # placeOrder() when you're ready to order. Both calls return a receipt object
    # that you can use for your records.
    response = productOrderService.verifyOrder(orderData)
    print(json.dumps(response, sort_keys=True, indent=2, separators=(',', ': ')))
except SoftLayer.SoftLayerAPIError as e:
    print("Unable to place the order. faultCode=%s, faultString=%s" % (e.faultCode, e.faultString))
Другие вопросы по тегам