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
20 changes: 14 additions & 6 deletions SoftLayer/CLI/order/package_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@
from SoftLayer.managers import ordering

COLUMNS = ['name',
'keyName', ]
'keyName',
'type']


@click.command()
@click.option('--keyword',
help="A word (or string) used to filter package names.")
@click.option('--keyword', help="A word (or string) used to filter package names.")
@click.option('--package_type', help="The keyname for the type of package. BARE_METAL_CPU for example")
@environment.pass_env
def cli(env, keyword):
def cli(env, keyword, package_type):
"""List packages that can be ordered via the placeOrder API.

\b
Expand All @@ -32,19 +33,26 @@ def cli(env, keyword):
# List out all packages with "server" in the name
slcli order package-list --keyword server

Package types can be used to remove unwanted packages
\b
Example:
slcli order package-list --package_type BARE_METAL_CPU
"""
manager = ordering.OrderingManager(env.client)
table = formatting.Table(COLUMNS)

_filter = {}
_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}
if keyword:
_filter = {'name': {'operation': '*= %s' % keyword}}
_filter['name'] = {'operation': '*= %s' % keyword}
if package_type:
_filter['type'] = {'keyName': {'operation': package_type}}

packages = manager.list_packages(filter=_filter)

for package in packages:
table.add_row([
package['name'],
package['keyName'],
package['type']['keyName']
])
env.fout(table)
2 changes: 1 addition & 1 deletion SoftLayer/managers/ordering.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

ITEM_MASK = '''id, keyName, description, itemCategory, categories'''

PACKAGE_MASK = '''id, name, keyName, isActive'''
PACKAGE_MASK = '''id, name, keyName, isActive, type'''

PRESET_MASK = '''id, name, keyName, description'''

Expand Down
45 changes: 39 additions & 6 deletions tests/CLI/modules/order_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,50 @@ def test_item_list(self):
self.assertEqual(expected_results, json.loads(result.output))

def test_package_list(self):
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'isActive': 1}
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'isActive': 1}
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
item3 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 0}
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
p_mock.return_value = [item1, item2]
p_mock.return_value = [item1, item2, item3]
_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}

result = self.run_command(['order', 'package-list'])

self.assert_no_fail(result)
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects')
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1'},
{'name': 'package2', 'keyName': 'PACKAGE2'}]
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
self.assertEqual(expected_results, json.loads(result.output))

def test_package_list_keyword(self):
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
p_mock.return_value = [item1, item2]

_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}
_filter['name'] = {'operation': '*= package1'}
result = self.run_command(['order', 'package-list', '--keyword', 'package1'])

self.assert_no_fail(result)
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
self.assertEqual(expected_results, json.loads(result.output))

def test_package_list_type(self):
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
p_mock.return_value = [item1, item2]

_filter = {'type': {'keyName': {'operation': 'BARE_METAL_CPU'}}}
result = self.run_command(['order', 'package-list', '--package_type', 'BARE_METAL_CPU'])

self.assert_no_fail(result)
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
self.assertEqual(expected_results, json.loads(result.output))

def test_place(self):
Expand Down