@@ -335,10 +335,16 @@ def _generate_create_dict(self,
335335 softwareDescription[id,referenceCode],
336336 prices
337337],
338+ activePresets,
338339regions[location[location]]
339340'''
340- package = self .client ['Product_Package' ].getObject (id = 200 ,
341- mask = package_mask )
341+ _filter = {
342+ 'type' : {'keyName' : {'operation' : 'BARE_METAL_CPU_FAST_PROVISION' }}
343+ }
344+ package_service = self .client ['Product_Package' ]
345+ package = package_service .getAllObjects (filter = _filter ,
346+ mask = package_mask ,
347+ limit = 1 )
342348
343349 prices = []
344350 for category in ['pri_ip_addresses' ,
@@ -353,18 +359,20 @@ def _generate_create_dict(self,
353359 prices .append (_get_bandwidth_price_id (package ['items' ],
354360 hourly = hourly ,
355361 no_public = no_public ))
362+
356363 prices .append (_get_port_speed_price_id (package ['items' ],
357364 port_speed ,
358365 no_public ))
366+
359367 for extra in extras :
360368 prices .append (_get_extra_price_id (package ['items' ], extra , hourly ))
361369
362370 order = {
363371 'hardware' : [hardware ],
364- 'location' : datacenter , # TODO: lookup OS price id based on keyname instead of a name like "HONGKONG02"
372+ 'location' : _get_location_long_name ( package , datacenter ),
365373 'prices' : [{'id' : price } for price in prices ],
366- 'packageId' : 200 , # TODO: Look this up based on package type
367- 'presetId' : 70 , # TODO: Verify that preset id is a thing
374+ 'packageId' : package [ 'id' ],
375+ 'presetId' : _get_preset_id ( package , size ),
368376 'useHourlyPricing' : hourly ,
369377 }
370378
@@ -574,3 +582,21 @@ def is_private_port_speed_item(item):
574582 return True
575583
576584 return False
585+
586+
587+ def _get_location_long_name (package , datacenter ):
588+ for region in package ['regions' ]:
589+ if region ['location' ]['location' ]['name' ] == datacenter :
590+ return region ['keyname' ]
591+
592+ raise SoftLayer .SoftLayerError ("Could not find valid location for: '%s'"
593+ % datacenter )
594+
595+
596+ def _get_preset_id (package , size ):
597+ for preset in package ['activePresets' ]:
598+ if preset ['keyName' ] == size :
599+ return preset ['id' ]
600+
601+ raise SoftLayer .SoftLayerError ("Could not find valid size for: '%s'"
602+ % size )
0 commit comments