@@ -1068,8 +1068,11 @@ def upgrade(self, instance_id, cpus=None, memory=None, nic_speed=None, public=Tr
10681068 'Unable to find %s option with value %s' % (
10691069 ('disk' , disk_guest .get ('capacity' ))))
10701070
1071+ category_id = self .get_disk_category_id_by_disk_number (disk_guest .get ('capacity' ), disk_number )
1072+ if category_id is None :
1073+ raise exceptions .SoftLayerError ('Invalid disk number to this disk capacity' )
10711074 category = {'categories' : [{
1072- 'categoryCode ' : 'guest_disk' + str ( disk_number ) ,
1075+ 'id ' : category_id ,
10731076 'complexType' : "SoftLayer_Product_Item_Category" }],
10741077 'complexType' : 'SoftLayer_Product_Item_Price' ,
10751078 'id' : price_id }
@@ -1101,6 +1104,43 @@ def upgrade(self, instance_id, cpus=None, memory=None, nic_speed=None, public=Tr
11011104 return True
11021105 return False
11031106
1107+ def get_disk_category_id_by_disk_number (self , capacity , disk_number ):
1108+ """Uses Product_Package::getItemPrices to get all disk items with its categories and
1109+
1110+ disk_key_names dictionary to convert disk numbers (int) to ordinal numbers (string)
1111+ """
1112+ disk_key_names = {
1113+ 1 : "First Disk" ,
1114+ 2 : "Second Disk" ,
1115+ 3 : "Third Disk" ,
1116+ 4 : "Fourth Disk" ,
1117+ 5 : "Fifth Disk" ,
1118+ }
1119+ category_to_request = disk_key_names .get (disk_number )
1120+ if category_to_request is None :
1121+ return None
1122+
1123+ key_name = "*= GUEST_DISK_" + str (capacity )+ "_GB_SAN"
1124+ object_filter = {
1125+ "itemPrices" : {
1126+ "locationGroupId" : {"operation" : "is null" },
1127+ "item" : {
1128+ "keyName" : {"operation" : key_name }
1129+ }
1130+ }
1131+ }
1132+ mask = "mask[id,locationGroupId,item[capacity,description,keyName],categories]"
1133+ disk_items = self .client .call (
1134+ 'SoftLayer_Product_Package' , 'getItemPrices' , id = 46 , mask = mask , filter = object_filter
1135+ )
1136+ category_id = None
1137+ for disk_item in disk_items :
1138+ for category in disk_item .get ('categories' ):
1139+ if category .get ('name' ) == category_to_request :
1140+ category_id = category .get ('id' )
1141+ break
1142+ return category_id
1143+
11041144 def order_guest (self , guest_object , test = False ):
11051145 """Uses Product_Order::placeOrder to create a virtual guest.
11061146
0 commit comments