現在我正在開發一個關於softlayer api的項目。我不想通過softlayer api獲得os列表。就像門戶網站一樣。有一定的方法來獲得正確的操作系統列表嗎?關於〜softlayer API:獲取操作系統版本列表?
0
A
回答
0
不幸的是,這是無法獲取同樣的結果比Control Portal進行單呼,但它使用的編程語言是可能的。
要見編程通過SoftLayer的支持語言:
看看下面的python腳本:
"""
List OSs for VSI similar than Portal
See below references for more details.
Important manual pages:
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices
http://sldn.softlayer.com/article/object-filters
http://sldn.softlayer.com/article/object-Masks
@License: http://sldn.softlayer.com/article/License
@Author: SoftLayer Technologies, Inc. <[email protected]>
"""
import SoftLayer
import datetime
import time
# Your SoftLayer's username and api Key
USERNAME = 'set me'
API_KEY = 'set me'
# Package id
packageId = 46
# Datacenter
datacenter = 'wdc04'
# Computing INstance
core = '1 x 2.0 GHz Core'
# Creating service
client = SoftLayer.Client(username=USERNAME, api_key=API_KEY)
packageService = client['SoftLayer_Product_Package']
# Declaring filters and mask to get additional information for items
filterDatacenter = {"itemPrices": {"pricingLocationGroup": {"locations": {"name": {"operation": datacenter}}}}}
objectMaskDatacenter = 'mask[pricingLocationGroup[locations]]'
objectMask = 'mask[pricingLocationGroup[locations],categories,item[id, description, capacity,softwareDescription[manufacturer],availabilityAttributeCount, availabilityAttributes[attributeType]]]'
filterInstance = {
'itemPrices': {
'categories': {
'categoryCode': {
'operation': 'os'
}
}
}
}
# Define a variable to get capacity
coreCapacity = 0
# To get item id information
itemId = 0
flag = False
# Define the manufacturers from which you like to get information
manufacturers = ["CentOS", "CloudLinux", "CoreOS", "Debian", "Microsoft", "Redhat", "Ubuntu"]
# Declare time to avoid list OS expired
now = time.strftime("%m/%d/%Y")
nowTime = time.mktime(datetime.datetime.strptime(now, "%m/%d/%Y").timetuple())
try:
conflicts = packageService.getItemConflicts(id=packageId)
itemPrices = packageService.getItemPrices(id=packageId, filter=filterDatacenter, mask=objectMask)
if len(itemPrices) == 0:
filterDatacenter = {"itemPrices":{"locationGroupId":{"operation":"is null"}}}
itemPrices = packageService.getItemPrices(id=packageId, filter=filterDatacenter, mask=objectMask)
for itemPrice in itemPrices:
if itemPrice['item']['description'] == core:
itemId = itemPrice['item']['id']
coreCapacity = itemPrice['item']['capacity']
result = packageService.getItemPrices(id=packageId, mask=objectMask, filter=filterInstance)
filtered_os = []
for item in result:
for attribute in item['item']['availabilityAttributes']:
expireTime = time.mktime(datetime.datetime.strptime(attribute['value'], "%m/%d/%Y").timetuple())
if ((attribute['attributeType']['keyName'] == 'UNAVAILABLE_AFTER_DATE_NEW_ORDERS') and (expireTime >= nowTime)):
filtered_os.append(item)
if item['item']['availabilityAttributeCount'] == 0:
filtered_os.append(item)
for manufacturer in manufacturers:
print(manufacturer)
for itemOs in filtered_os:
for conflict in conflicts:
if (((itemOs['item']['id'] == conflict['itemId']) and (itemId == conflict['resourceTableId'])) or ((itemId == conflict['itemId']) and (itemOs['item']['id'] == conflict['resourceTableId']))):
flag = False
break
else:
flag = True
if flag:
if itemOs['item']['softwareDescription']['manufacturer'] == manufacturer:
if 'capacityRestrictionMinimum' in itemOs:
if((itemOs['capacityRestrictionMinimum'] <= coreCapacity) and (coreCapacity <= itemOs['capacityRestrictionMaximum'])):
print("%s Price Id: %s Item Id: %s" % (itemOs['item']['description'], itemOs['id'], itemOs['item']['id']))
else:
print("%s Price Id: %s Item Id: %s" % (itemOs['item']['description'], itemOs['id'], itemOs['item']['id']))
print("---------------------------------------------------")
except SoftLayer.SoftLayerAPIError as e:
print('Unable to get Item Prices faultCode=%s, faultString=%s'
% (e.faultCode, e.faultString))
我加核心變量,因爲操作系統對核心容量有限制。另外,我還添加了datecenter以獲取特定數據中心的特定核心項目價格,這可能是不必要的,但您可以根據您的要求編輯此腳本。
同樣的想法可以應用於其他編程語言。
我希望它有幫助,請讓我知道任何疑問,意見或如果您需要進一步的幫助。
更新
我提高了劇本,我加入到檢查項目之間的衝突,爲了得到相同的結果爲每一種能力計算實例
0
有沒有你正在尋找一個特定語言的例子嗎?如果您使用的SoftLayer CLI可以做到這一點使用下面的命令
slcli vs create-options # For Virtual Guests
slcli server create-options # For Bare Metal Servers
+0
我使用python語言編程,非常感謝。 –
相關問題
- 1. 獲取Android操作系統版本表
- 2. 獲取操作系統版本
- 3. SoftLayer API獲取操作系統分區模板的ID
- 4. Blackberry操作系統版本
- 5. jQuery - 檢測操作系統和操作系統版本
- 6. 如何獲取Ruby上的特定操作系統版本?
- 7. 如何獲取android操作系統版本?
- 8. 獲取C#中Windows 10的最新版本操作系統#
- 9. 獲取網絡終端的操作系統版本(JAVA)
- 10. Node.js獲取/確定操作系統版本
- 11. 如何獲取Windows Phone的當前操作系統版本?
- 12. 獲取用戶操作系統和版本號
- 13. 在OS X上獲取操作系統版本
- 14. 如何獲取操作系統版本號?
- 15. 操作系統版本,API級別和Java版本之間的關係
- 16. C++檢測操作系統版本
- 17. 檢查DLL操作系統版本
- 18. Xcode iPhone操作系統多個版本
- 19. Xcode 6.4操作系統版本問題
- 20. 爲主要操作系統版本設置最低操作系統版本,同時允許以前的操作系統版本?
- 21. SafetyNet API的最低支持操作系統版本
- 22. SoftLayer API版本3.x
- 23. IntPtr.Size顯示操作系統版本或.NET版本?
- 24. 如何獲得操作系統版本asp.net
- 25. 如何獲得「友好」操作系統版本名稱?
- 26. 如何在c#中獲得真正的操作系統版本?
- 27. 如何獲取OS X系統版本?
- 28. 從操作系統獲取事件
- 29. 不使用WMI獲取操作系統
- 30. 用Postgresql獲取系統操作信息
我明白了。非常感謝〜 –
我改進了腳本。在我的答案中查看**更新的**部分 –