From aadb8f8b49ffbdf09648082af3aed33bba4660c0 Mon Sep 17 00:00:00 2001 From: Christopher Gallo Date: Mon, 15 Jan 2018 17:23:17 -0600 Subject: [PATCH] added type filters to package-list, auto-removes bluemix_services --- SoftLayer/CLI/order/package_list.py | 20 +++++++++---- SoftLayer/managers/ordering.py | 2 +- tests/CLI/modules/order_tests.py | 45 +++++++++++++++++++++++++---- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/SoftLayer/CLI/order/package_list.py b/SoftLayer/CLI/order/package_list.py index 9a6b97e6c..af3e36269 100644 --- a/SoftLayer/CLI/order/package_list.py +++ b/SoftLayer/CLI/order/package_list.py @@ -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 @@ -32,13 +33,19 @@ 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) @@ -46,5 +53,6 @@ def cli(env, keyword): table.add_row([ package['name'], package['keyName'], + package['type']['keyName'] ]) env.fout(table) diff --git a/SoftLayer/managers/ordering.py b/SoftLayer/managers/ordering.py index 51bf1810f..4d8e94c13 100644 --- a/SoftLayer/managers/ordering.py +++ b/SoftLayer/managers/ordering.py @@ -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''' diff --git a/tests/CLI/modules/order_tests.py b/tests/CLI/modules/order_tests.py index 0f35af224..3d049912d 100644 --- a/tests/CLI/modules/order_tests.py +++ b/tests/CLI/modules/order_tests.py @@ -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):