Skip to content

Commit

Permalink
Merge pull request #810 from kwienken/issue-809
Browse files Browse the repository at this point in the history
Add getting package by key for use in hardware manager
  • Loading branch information
allmightyspiff committed Mar 31, 2017
2 parents ee66567 + 4ca40e5 commit 47199db
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 9 deletions.
10 changes: 5 additions & 5 deletions SoftLayer/managers/hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,13 +411,13 @@ def _get_package(self):
regions[location[location[priceGroups]]]
'''

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

return packages[0]
return package

def _generate_create_dict(self,
size=None,
Expand Down
22 changes: 22 additions & 0 deletions SoftLayer/managers/ordering.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,25 @@ def order_quote(self, quote_id, extra, quantity=1):
container = self.generate_order_template(quote_id, extra,
quantity=quantity)
return self.client['Product_Order'].placeOrder(container)

def get_package_by_key(self, package_keyname, mask=None):
"""Get a single package with a given key.
If no packages are found, returns None
:param package_keyname string representing the package key name
we are interested in.
:param string mask: Mask to specify the properties we want to retrieve
"""
package_service = self.client['Product_Package']
_filter = {
'keyName': {
'operation': package_keyname,
},
}

packages = package_service.getAllObjects(mask=mask, filter=_filter)
if len(packages) == 0:
return None
else:
return packages.pop()
11 changes: 7 additions & 4 deletions SoftLayer/managers/vs.py
Original file line number Diff line number Diff line change
Expand Up @@ -823,11 +823,14 @@ def _get_package_items(self):
]
mask = "mask[%s]" % ','.join(mask)

package_type = "VIRTUAL_SERVER_INSTANCE"
package_id = self.ordering_manager.get_package_id_by_type(package_type)
package_service = self.client['Product_Package']
package_keyname = "CLOUD_SERVER"
package = self.ordering_manager.get_package_by_key(package_keyname)

if package is None:
raise ValueError("No package found for key: " + package_keyname)

return package_service.getItems(id=package_id, mask=mask)
package_service = self.client['Product_Package']
return package_service.getItems(id=package['id'], mask=mask)

def _get_price_id_for_upgrade(self, package_items, option, value,
public=True):
Expand Down
14 changes: 14 additions & 0 deletions tests/managers/ordering_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,17 @@ def test_generate_order_template_extra_quantity(self):
self.assertRaises(ValueError,
self.ordering.generate_order_template,
1234, [], quantity=1)

def test_get_package_by_key_returns_if_found(self):
package_keyname = "BARE_METAL_SERVER"
mask = "mask[id, name]"
package = self.ordering.get_package_by_key(package_keyname, mask)
self.assertIsNotNone(package)

def test_get_package_by_key_returns_none_if_not_found(self):
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
mock.return_value = []

package = self.ordering.get_package_by_key("WILLY_NILLY_SERVERS")

self.assertIsNone(package)

0 comments on commit 47199db

Please sign in to comment.