Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions SoftLayer/managers/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,14 +164,14 @@ def add_subnet(self, subnet_type, quantity=None, endpoint_id=None, version=4,
# item description.
price_id = None
quantity_str = str(quantity)
package_items = package.getItems(id=0)
package_items = package.getItems(id=0, mask='mask[prices[packageReferences[package[keyName]]]]')
for item in package_items:
category_code = utils.lookup(item, 'itemCategory', 'categoryCode')
if all([category_code == category,
item.get('capacity') == quantity_str,
version == 4 or (version == 6 and
desc in item['description'])]):
price_id = item['prices'][0]['id']
price_id = self.get_subnet_item_price(item, subnet_type, version)
break

order = {
Expand All @@ -192,6 +192,24 @@ def add_subnet(self, subnet_type, quantity=None, endpoint_id=None, version=4,
else:
return self.client['Product_Order'].placeOrder(order)

@staticmethod
def get_subnet_item_price(item, subnet_type, version):
"""Get the subnet specific item price id.

:param version: 4 for IPv4, 6 for IPv6.
:param subnet_type: Type of subnet to add: private, public, global,static.
:param item: Subnet item.
"""
price_id = None
if version == 4 and subnet_type == 'static':
for item_price in item['prices']:
for package_reference in item_price['packageReferences']:
if subnet_type.upper() in package_reference['package']['keyName']:
price_id = item_price['id']
else:
price_id = item['prices'][0]['id']
return price_id

def assign_global_ip(self, global_ip_id, target):
"""Assigns a global IP address to a specified target.

Expand Down
8 changes: 8 additions & 0 deletions tests/managers/network_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ def test_add_subnet_for_ipv4(self):

self.assertEqual(fixtures.SoftLayer_Product_Order.verifyOrder, result)

result = self.network.add_subnet('static',
quantity=8,
endpoint_id=1234,
version=4,
test_order=True)

self.assertEqual(fixtures.SoftLayer_Product_Order.verifyOrder, result)

def test_add_subnet_for_ipv6(self):
# Test a public IPv6 order
result = self.network.add_subnet('public',
Expand Down