Skip to content

Commit aadb8f8

Browse files
added type filters to package-list, auto-removes bluemix_services
1 parent 02812ce commit aadb8f8

File tree

3 files changed

+54
-13
lines changed

3 files changed

+54
-13
lines changed

SoftLayer/CLI/order/package_list.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
from SoftLayer.managers import ordering
99

1010
COLUMNS = ['name',
11-
'keyName', ]
11+
'keyName',
12+
'type']
1213

1314

1415
@click.command()
15-
@click.option('--keyword',
16-
help="A word (or string) used to filter package names.")
16+
@click.option('--keyword', help="A word (or string) used to filter package names.")
17+
@click.option('--package_type', help="The keyname for the type of package. BARE_METAL_CPU for example")
1718
@environment.pass_env
18-
def cli(env, keyword):
19+
def cli(env, keyword, package_type):
1920
"""List packages that can be ordered via the placeOrder API.
2021
2122
\b
@@ -32,19 +33,26 @@ def cli(env, keyword):
3233
# List out all packages with "server" in the name
3334
slcli order package-list --keyword server
3435
36+
Package types can be used to remove unwanted packages
37+
\b
38+
Example:
39+
slcli order package-list --package_type BARE_METAL_CPU
3540
"""
3641
manager = ordering.OrderingManager(env.client)
3742
table = formatting.Table(COLUMNS)
3843

39-
_filter = {}
44+
_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}
4045
if keyword:
41-
_filter = {'name': {'operation': '*= %s' % keyword}}
46+
_filter['name'] = {'operation': '*= %s' % keyword}
47+
if package_type:
48+
_filter['type'] = {'keyName': {'operation': package_type}}
4249

4350
packages = manager.list_packages(filter=_filter)
4451

4552
for package in packages:
4653
table.add_row([
4754
package['name'],
4855
package['keyName'],
56+
package['type']['keyName']
4957
])
5058
env.fout(table)

SoftLayer/managers/ordering.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

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

19-
PACKAGE_MASK = '''id, name, keyName, isActive'''
19+
PACKAGE_MASK = '''id, name, keyName, isActive, type'''
2020

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

tests/CLI/modules/order_tests.py

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,50 @@ def test_item_list(self):
4747
self.assertEqual(expected_results, json.loads(result.output))
4848

4949
def test_package_list(self):
50-
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'isActive': 1}
51-
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'isActive': 1}
50+
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
51+
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
52+
item3 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 0}
5253
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
53-
p_mock.return_value = [item1, item2]
54+
p_mock.return_value = [item1, item2, item3]
55+
_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}
5456

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

5759
self.assert_no_fail(result)
58-
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects')
59-
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1'},
60-
{'name': 'package2', 'keyName': 'PACKAGE2'}]
60+
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
61+
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
62+
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
63+
self.assertEqual(expected_results, json.loads(result.output))
64+
65+
def test_package_list_keyword(self):
66+
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
67+
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
68+
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
69+
p_mock.return_value = [item1, item2]
70+
71+
_filter = {'type': {'keyName': {'operation': '!= BLUEMIX_SERVICE'}}}
72+
_filter['name'] = {'operation': '*= package1'}
73+
result = self.run_command(['order', 'package-list', '--keyword', 'package1'])
74+
75+
self.assert_no_fail(result)
76+
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
77+
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
78+
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
79+
self.assertEqual(expected_results, json.loads(result.output))
80+
81+
def test_package_list_type(self):
82+
item1 = {'name': 'package1', 'keyName': 'PACKAGE1', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
83+
item2 = {'name': 'package2', 'keyName': 'PACKAGE2', 'type': {'keyName': 'BARE_METAL_CPU'}, 'isActive': 1}
84+
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
85+
p_mock.return_value = [item1, item2]
86+
87+
_filter = {'type': {'keyName': {'operation': 'BARE_METAL_CPU'}}}
88+
result = self.run_command(['order', 'package-list', '--package_type', 'BARE_METAL_CPU'])
89+
90+
self.assert_no_fail(result)
91+
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects', filter=_filter)
92+
expected_results = [{'name': 'package1', 'keyName': 'PACKAGE1', 'type': 'BARE_METAL_CPU'},
93+
{'name': 'package2', 'keyName': 'PACKAGE2', 'type': 'BARE_METAL_CPU'}]
6194
self.assertEqual(expected_results, json.loads(result.output))
6295

6396
def test_place(self):

0 commit comments

Comments
 (0)