Skip to content

Commit 47199db

Browse files
Merge pull request #810 from kwienken/issue-809
Add getting package by key for use in hardware manager
2 parents ee66567 + 4ca40e5 commit 47199db

File tree

4 files changed

+48
-9
lines changed

4 files changed

+48
-9
lines changed

SoftLayer/managers/hardware.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -411,13 +411,13 @@ def _get_package(self):
411411
regions[location[location[priceGroups]]]
412412
'''
413413

414-
package_type = 'BARE_METAL_CPU_FAST_PROVISION'
415-
packages = self.ordering_manager.get_packages_of_type([package_type],
416-
mask=mask)
417-
if len(packages) != 1:
414+
package_keyname = 'BARE_METAL_SERVER'
415+
package = self.ordering_manager.get_package_by_key(package_keyname,
416+
mask=mask)
417+
if package is None:
418418
raise SoftLayer.SoftLayerError("Ordering package not found")
419419

420-
return packages[0]
420+
return package
421421

422422
def _generate_create_dict(self,
423423
size=None,

SoftLayer/managers/ordering.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,25 @@ def order_quote(self, quote_id, extra, quantity=1):
199199
container = self.generate_order_template(quote_id, extra,
200200
quantity=quantity)
201201
return self.client['Product_Order'].placeOrder(container)
202+
203+
def get_package_by_key(self, package_keyname, mask=None):
204+
"""Get a single package with a given key.
205+
206+
If no packages are found, returns None
207+
208+
:param package_keyname string representing the package key name
209+
we are interested in.
210+
:param string mask: Mask to specify the properties we want to retrieve
211+
"""
212+
package_service = self.client['Product_Package']
213+
_filter = {
214+
'keyName': {
215+
'operation': package_keyname,
216+
},
217+
}
218+
219+
packages = package_service.getAllObjects(mask=mask, filter=_filter)
220+
if len(packages) == 0:
221+
return None
222+
else:
223+
return packages.pop()

SoftLayer/managers/vs.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -823,11 +823,14 @@ def _get_package_items(self):
823823
]
824824
mask = "mask[%s]" % ','.join(mask)
825825

826-
package_type = "VIRTUAL_SERVER_INSTANCE"
827-
package_id = self.ordering_manager.get_package_id_by_type(package_type)
828-
package_service = self.client['Product_Package']
826+
package_keyname = "CLOUD_SERVER"
827+
package = self.ordering_manager.get_package_by_key(package_keyname)
828+
829+
if package is None:
830+
raise ValueError("No package found for key: " + package_keyname)
829831

830-
return package_service.getItems(id=package_id, mask=mask)
832+
package_service = self.client['Product_Package']
833+
return package_service.getItems(id=package['id'], mask=mask)
831834

832835
def _get_price_id_for_upgrade(self, package_items, option, value,
833836
public=True):

tests/managers/ordering_tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,17 @@ def test_generate_order_template_extra_quantity(self):
123123
self.assertRaises(ValueError,
124124
self.ordering.generate_order_template,
125125
1234, [], quantity=1)
126+
127+
def test_get_package_by_key_returns_if_found(self):
128+
package_keyname = "BARE_METAL_SERVER"
129+
mask = "mask[id, name]"
130+
package = self.ordering.get_package_by_key(package_keyname, mask)
131+
self.assertIsNotNone(package)
132+
133+
def test_get_package_by_key_returns_none_if_not_found(self):
134+
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
135+
mock.return_value = []
136+
137+
package = self.ordering.get_package_by_key("WILLY_NILLY_SERVERS")
138+
139+
self.assertIsNone(package)

0 commit comments

Comments
 (0)