Skip to content

Commit af4fd92

Browse files
list and detail support for capacity groups
1 parent 475b1eb commit af4fd92

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""Shows the details of a reserved capacity group"""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
6+
import SoftLayer
7+
from SoftLayer.CLI import environment
8+
from SoftLayer.CLI import formatting
9+
from SoftLayer.managers.vs_capacity import CapacityManager as CapacityManager
10+
11+
12+
from pprint import pprint as pp
13+
14+
@click.command()
15+
@click.argument('identifier')
16+
@environment.pass_env
17+
def cli(env, identifier):
18+
"""Reserved Capacity Group Details"""
19+
manager = CapacityManager(env.client)
20+
result = manager.get_object(identifier)
21+
try:
22+
flavor = result['instances'][0]['billingItem']['description']
23+
except KeyError:
24+
flavor = "Pending Approval..."
25+
26+
table = formatting.Table(
27+
["ID", "Created"],
28+
title= "%s - %s" % (result.get('name'), flavor)
29+
)
30+
for rci in result['instances']:
31+
table.add_row([rci['guestId'], rci['createDate']])
32+
env.fout(table)
33+

SoftLayer/CLI/virt/capacity/list.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,23 @@ def cli(env):
1717
"""List Reserved Capacity"""
1818
manager = CapacityManager(env.client)
1919
result = manager.list()
20-
pp(result)
20+
table = formatting.Table(
21+
["ID", "Name", "Capacity", "Flavor", "Instance Cost", "Created"],
22+
title="Reserved Capacity"
23+
)
24+
for rc in result:
25+
occupied_string = "#" * int(rc.get('occupiedInstancesCount',0))
26+
available_string = "-" * int(rc.get('availableInstanceCount',0))
27+
28+
try:
29+
flavor = rc['instances'][0]['billingItem']['description']
30+
cost = float(rc['instances'][0]['billingItem']['hourlyRecurringFee'])
31+
instance_count = int(rc.get('instanceCount',0))
32+
cost_string = "%s * %s = %s" % (cost, instance_count, cost * instance_count)
33+
except KeyError:
34+
flavor = "Unknown Billing Item"
35+
cost_string = "-"
36+
capacity = "%s%s" % (occupied_string, available_string)
37+
table.add_row([rc['id'], rc['name'], capacity, flavor, cost_string, rc['createDate']])
38+
env.fout(table)
39+
# pp(result)

SoftLayer/managers/vs_capacity.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,21 @@ def __init__(self, client, ordering_manager=None):
3333
self.client = client
3434
self.account = client['Account']
3535
self.capacity_package = 'RESERVED_CAPACITY'
36+
self.rcg_service = 'Virtual_ReservedCapacityGroup'
3637

3738
if ordering_manager is None:
3839
self.ordering_manager = ordering.OrderingManager(client)
3940

4041
def list(self):
41-
results = self.client.call('Account', 'getReservedCapacityGroups')
42+
mask = "mask[availableInstanceCount, occupiedInstanceCount, instances[billingItem], instanceCount]"
43+
results = self.client.call('Account', 'getReservedCapacityGroups', mask=mask)
4244
return results
4345

46+
def get_object(self, identifier):
47+
mask = "mask[instances[billingItem]]"
48+
result = self.client.call(self.rcg_service, 'getObject', id=identifier, mask=mask)
49+
return result
50+
4451
def get_create_options(self):
4552
mask = "mask[attributes,prices[pricingLocationGroup]]"
4653
# mask = "mask[id, description, capacity, units]"

0 commit comments

Comments
 (0)