Skip to content

Commit d3588cc

Browse files
Merge pull request #1578 from caberos/issue1574
Add pricing date to slcli order preset-list
2 parents a584217 + 25fac14 commit d3588cc

File tree

4 files changed

+73
-12
lines changed

4 files changed

+73
-12
lines changed

Diff for: SoftLayer/CLI/order/preset_list.py

+37-8
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
@click.argument('package_keyname')
1717
@click.option('--keyword',
1818
help="A word (or string) used to filter preset names.")
19+
@click.option('--prices', '-p', is_flag=True, help='Use --prices to list the server item prices, e.g. --prices')
1920
@environment.pass_env
20-
def cli(env, package_keyname, keyword):
21+
def cli(env, package_keyname, keyword, prices):
2122
"""List package presets.
2223
2324
.. Note::
@@ -33,6 +34,8 @@ def cli(env, package_keyname, keyword):
3334
slcli order preset-list BARE_METAL_SERVER --keyword gpu
3435
3536
"""
37+
38+
tables = []
3639
table = formatting.Table(COLUMNS)
3740
manager = ordering.OrderingManager(env.client)
3841

@@ -41,10 +44,36 @@ def cli(env, package_keyname, keyword):
4144
_filter = {'activePresets': {'name': {'operation': '*= %s' % keyword}}}
4245
presets = manager.list_presets(package_keyname, filter=_filter)
4346

44-
for preset in presets:
45-
table.add_row([
46-
str(preset['name']).strip(),
47-
str(preset['keyName']).strip(),
48-
str(preset['description']).strip()
49-
])
50-
env.fout(table)
47+
if prices:
48+
table_prices = formatting.Table(['keyName', 'priceId', 'Hourly', 'Monthly', 'Restriction', 'Location'])
49+
for price in presets:
50+
locations = []
51+
if price['locations'] != []:
52+
for location in price['locations']:
53+
locations.append(location['name'])
54+
cr_max = get_item_price_data(price['prices'][0], 'capacityRestrictionMaximum')
55+
cr_min = get_item_price_data(price['prices'][0], 'capacityRestrictionMinimum')
56+
cr_type = get_item_price_data(price['prices'][0], 'capacityRestrictionType')
57+
table_prices.add_row([price['keyName'], price['id'],
58+
get_item_price_data(price['prices'][0], 'hourlyRecurringFee'),
59+
get_item_price_data(price['prices'][0], 'recurringFee'),
60+
"%s - %s %s" % (cr_min, cr_max, cr_type), str(locations)])
61+
tables.append(table_prices)
62+
63+
else:
64+
for preset in presets:
65+
table.add_row([
66+
str(preset['name']).strip(),
67+
str(preset['keyName']).strip(),
68+
str(preset['description']).strip()
69+
])
70+
tables.append(table)
71+
env.fout(tables)
72+
73+
74+
def get_item_price_data(price, item_attribute):
75+
"""Given an SoftLayer_Product_Item_Price, returns its default price data"""
76+
result = '-'
77+
if item_attribute in price:
78+
result = price[item_attribute]
79+
return result

Diff for: SoftLayer/fixtures/SoftLayer_Product_Package.py

+30-3
Original file line numberDiff line numberDiff line change
@@ -1847,23 +1847,50 @@
18471847
"isActive": "1",
18481848
"keyName": "M1_64X512X25",
18491849
"name": "M1.64x512x25",
1850-
"packageId": 835
1850+
"packageId": 835,
1851+
"locations": [],
1852+
"prices": [
1853+
{
1854+
"hourlyRecurringFee": "0",
1855+
"id": 258963,
1856+
"itemId": 8195,
1857+
"recurringFee": "0",
1858+
"setupFee": "0"
1859+
}]
18511860
},
18521861
{
18531862
"description": "M1.56x448x100",
18541863
"id": 797,
18551864
"isActive": "1",
18561865
"keyName": "M1_56X448X100",
18571866
"name": "M1.56x448x100",
1858-
"packageId": 835
1867+
"packageId": 835,
1868+
"locations": [],
1869+
"prices": [
1870+
{
1871+
"hourlyRecurringFee": "0",
1872+
"id": 698563,
1873+
"itemId": 8195,
1874+
"recurringFee": "0",
1875+
"setupFee": "0"
1876+
}]
18591877
},
18601878
{
18611879
"description": "M1.64x512x100",
18621880
"id": 801,
18631881
"isActive": "1",
18641882
"keyName": "M1_64X512X100",
18651883
"name": "M1.64x512x100",
1866-
"packageId": 835
1884+
"packageId": 835,
1885+
"locations": [],
1886+
"prices": [
1887+
{
1888+
"hourlyRecurringFee": "0",
1889+
"id": 963258,
1890+
"itemId": 8195,
1891+
"recurringFee": "0",
1892+
"setupFee": "0"
1893+
}]
18671894
}
18681895
]
18691896

Diff for: SoftLayer/managers/ordering.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

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

20-
PRESET_MASK = '''id, name, keyName, description'''
20+
PRESET_MASK = '''id, name, keyName, description, categories, prices, locations'''
2121

2222

2323
class OrderingManager(object):

Diff for: tests/CLI/modules/order_tests.py

+5
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ def test_preset_list_keywork(self):
300300
self.assert_no_fail(result)
301301
self.assert_called_with('SoftLayer_Product_Package', 'getActivePresets', filter=_filter)
302302

303+
def test_preset_list_prices(self):
304+
result = self.run_command(['order', 'preset-list', 'package', '--prices'])
305+
self.assert_no_fail(result)
306+
self.assert_called_with('SoftLayer_Product_Package', 'getActivePresets')
307+
303308
def test_location_list(self):
304309
result = self.run_command(['order', 'package-locations', 'package'])
305310
self.assert_no_fail(result)

0 commit comments

Comments
 (0)