Skip to content

Commit 2abc785

Browse files
author
Khuong-Nguyen
committed
Added Dedicated host functionality
1 parent a09d814 commit 2abc785

7 files changed

Lines changed: 109 additions & 69 deletions

File tree

SoftLayer/CLI/dedicatedhost/create.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
default='hourly',
3535
show_default=True,
3636
help="Billing rate")
37-
@click.option('--test',
37+
@click.option('--verify',
3838
is_flag=True,
39-
help="Do not actually create the server")
39+
help="Verify dedicatedhost without creating it.")
4040
@click.option('--template', '-t',
4141
is_eager=True,
4242
callback=template.TemplateCallback(list_args=['key']),
@@ -46,20 +46,22 @@
4646
type=click.Path(writable=True, resolve_path=True),
4747
help="Exports options to a template file")
4848
@environment.pass_env
49-
def cli(env, **args):
49+
def cli(env, **kwargs):
5050
"""Order/create a dedicated host."""
5151
mgr = SoftLayer.DedicatedHostManager(env.client)
5252

5353
order = {
54-
'hostname': args['hostname'],
55-
'domain': args['domain'],
56-
'flavor': args['flavor'],
57-
'router': args['router'],
58-
'location': args.get('datacenter'),
59-
'hourly': args.get('billing') == 'hourly',
54+
'hostname': kwargs['hostname'],
55+
'domain': kwargs['domain'],
56+
'flavor': kwargs['flavor'],
57+
'location': kwargs['datacenter'],
58+
'hourly': kwargs.get('billing') == 'hourly',
6059
}
6160

62-
do_create = not (args['export'] or args['test'])
61+
if kwargs['router']:
62+
order['router'] = kwargs['router']
63+
64+
do_create = not (kwargs['export'] or kwargs['verify'])
6365

6466
output = None
6567

@@ -88,10 +90,10 @@ def cli(env, **args):
8890
' -- ! Prices reflected here are retail and do not '
8991
'take account level discounts and are not guaranteed.'))
9092

91-
if args['export']:
92-
export_file = args.pop('export')
93-
template.export_to_template(export_file, args,
94-
exclude=['wait', 'test'])
93+
if kwargs['export']:
94+
export_file = kwargs.pop('export')
95+
template.export_to_template(export_file, kwargs,
96+
exclude=['wait', 'verify'])
9597
env.fout('Successfully exported options to a template file.')
9698

9799
if do_create:

SoftLayer/CLI/dedicatedhost/create_options.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
" ex. 56_CORES_X_242_RAM_X_1_4_TB",
2020
show_default=True)
2121
@environment.pass_env
22-
def cli(env, **args):
22+
def cli(env, **kwargs):
2323
"""host order options for a given dedicated host.
2424
2525
To get a list of available backend routers see example:
@@ -29,7 +29,7 @@ def cli(env, **args):
2929
mgr = SoftLayer.DedicatedHostManager(env.client)
3030
tables = []
3131

32-
if not args['flavor'] and not args['datacenter']:
32+
if not kwargs['flavor'] and not kwargs['datacenter']:
3333
options = mgr.get_create_options()
3434

3535
# Datacenters
@@ -45,13 +45,13 @@ def cli(env, **args):
4545
dh_table.add_row([item['name'], item['key']])
4646
tables.append(dh_table)
4747
else:
48-
if args['flavor'] is None or args['datacenter'] is None:
48+
if kwargs['flavor'] is None or kwargs['datacenter'] is None:
4949
raise exceptions.ArgumentError('Both a flavor and datacenter need '
50-
'to be passed as arguments\n'
50+
'to be passed as arguments '
5151
'ex. slcli dh create-options -d '
5252
'ams01 -f '
5353
'56_CORES_X_242_RAM_X_1_4_TB')
54-
router_opt = mgr.get_router_options(args['datacenter'], args['flavor'])
54+
router_opt = mgr.get_router_options(kwargs['datacenter'], kwargs['flavor'])
5555
br_table = formatting.Table(
5656
['Available Backend Routers'])
5757
for router in router_opt:

SoftLayer/CLI/dedicatedhost/detail.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,8 @@ def cli(env, identifier, price=False, guests=False):
3838
table.add_row(['modify date', result['modifyDate']])
3939
table.add_row(['router id', result['backendRouter']['id']])
4040
table.add_row(['router hostname', result['backendRouter']['hostname']])
41-
if utils.lookup(result, 'billingItem') != {}:
42-
table.add_row(['owner', formatting.FormattedItem(
43-
utils.lookup(result, 'billingItem', 'orderItem',
44-
'order', 'userRecord',
45-
'username') or formatting.blank(),
46-
)])
47-
else:
48-
table.add_row(['owner', formatting.blank()])
41+
table.add_row(['owner', formatting.FormattedItem(
42+
utils.lookup(result, 'billingItem', 'orderItem', 'order', 'userRecord', 'username') or formatting.blank(),)])
4943

5044
if price:
5145
total_price = utils.lookup(result,

SoftLayer/CLI/hardware/create.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ def cli(env, **args):
122122
return
123123

124124
if do_create:
125-
126125
if not (env.skip_confirmations or formatting.confirm(
127126
"This action will incur charges on your account. "
128127
"Continue?")):

SoftLayer/managers/dedicated_host.py

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ def list_instances(self, tags=None, cpus=None, memory=None, hostname=None,
7979
]
8080
kwargs['mask'] = "mask[%s]" % ','.join(items)
8181

82-
call = 'getDedicatedHosts'
83-
8482
_filter = utils.NestedDict(kwargs.get('filter') or {})
8583
if tags:
8684
_filter['dedicatedHosts']['tagReferences']['tag']['name'] = {
@@ -109,8 +107,7 @@ def list_instances(self, tags=None, cpus=None, memory=None, hostname=None,
109107
utils.query_filter(datacenter))
110108

111109
kwargs['filter'] = _filter.to_dict()
112-
func = getattr(self.account, call)
113-
return func(**kwargs)
110+
return self.account.getDedicatedHosts(**kwargs)
114111

115112
def get_host(self, host_id, **kwargs):
116113
"""Get details about a dedicated host.
@@ -132,22 +129,46 @@ def get_host(self, host_id, **kwargs):
132129
133130
"""
134131
if 'mask' not in kwargs:
135-
kwargs['mask'] = (
136-
'id,'
137-
'name,'
138-
'cpuCount,'
139-
'memoryCapacity,'
140-
'diskCapacity,'
141-
'createDate,'
142-
'modifyDate,'
143-
'backendRouter[id, hostname, domain],'
144-
'billingItem[id, nextInvoiceTotalRecurringAmount, '
145-
'children[categoryCode,nextInvoiceTotalRecurringAmount],'
146-
'orderItem[id, order.userRecord[username]]],'
147-
'datacenter[id, name, longName],'
148-
'guests[id, hostname, domain, uuid],'
149-
'guestCount'
150-
)
132+
kwargs['mask'] = ('''
133+
id,
134+
name,
135+
cpuCount,
136+
memoryCapacity,
137+
diskCapacity,
138+
createDate,
139+
modifyDate,
140+
backendRouter[
141+
id,
142+
hostname,
143+
domain
144+
],
145+
billingItem[
146+
id,
147+
nextInvoiceTotalRecurringAmount,
148+
children[
149+
categoryCode,
150+
nextInvoiceTotalRecurringAmount
151+
],
152+
orderItem[
153+
id,
154+
order.userRecord[
155+
username
156+
]
157+
]
158+
],
159+
datacenter[
160+
id,
161+
name,
162+
longName
163+
],
164+
guests[
165+
id,
166+
hostname,
167+
domain,
168+
uuid
169+
],
170+
guestCount
171+
''')
151172

152173
return self.host.getObject(id=host_id, **kwargs)
153174

@@ -340,7 +361,7 @@ def _get_backend_router(self, locations, item):
340361

341362
raise SoftLayer.SoftLayerError("Could not find available routers")
342363

343-
def _get_default_router(self, routers, router_name):
364+
def _get_default_router(self, routers, router_name=None):
344365
"""Returns the default router for ordering a dedicated host."""
345366
if router_name is None:
346367
for router in routers:

tests/CLI/modules/dedicatedhost_tests.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ def test_create_verify(self):
198198
mock_package.return_value = SoftLayer_Product_Package.verifyOrderDH
199199

200200
result = self.run_command(['dedicatedhost', 'create',
201-
'--test',
201+
'--verify',
202202
'--hostname=host',
203203
'--domain=example.com',
204204
'--datacenter=dal05',
@@ -228,7 +228,7 @@ def test_create_verify(self):
228228
args=args)
229229

230230
result = self.run_command(['dh', 'create',
231-
'--test',
231+
'--verify',
232232
'--hostname=host',
233233
'--domain=example.com',
234234
'--datacenter=dal05',
@@ -278,7 +278,7 @@ def test_create_export(self):
278278
mock_package.return_value = SoftLayer_Product_Package.verifyOrderDH
279279

280280
self.run_command(['dedicatedhost', 'create',
281-
'--test',
281+
'--verify',
282282
'--hostname=host',
283283
'--domain=example.com',
284284
'--datacenter=dal05',
@@ -297,7 +297,7 @@ def test_create_verify_no_price_or_more_than_one(self):
297297
mock_package.return_value = ret_val
298298

299299
result = self.run_command(['dedicatedhost', 'create',
300-
'--test',
300+
'--verify',
301301
'--hostname=host',
302302
'--domain=example.com',
303303
'--datacenter=dal05',

tests/managers/dedicated_host_tests.py

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,46 @@ def test_get_host(self):
4040

4141
self.dedicated_host.get_host(12345)
4242

43-
mask = (
44-
'id,'
45-
'name,'
46-
'cpuCount,'
47-
'memoryCapacity,'
48-
'diskCapacity,'
49-
'createDate,'
50-
'modifyDate,'
51-
'backendRouter[id, hostname, domain],'
52-
'billingItem[id, nextInvoiceTotalRecurringAmount, '
53-
'children[categoryCode,nextInvoiceTotalRecurringAmount],'
54-
'orderItem[id, order.userRecord[username]]],'
55-
'datacenter[id, name, longName],'
56-
'guests[id, hostname, domain, uuid],'
57-
'guestCount'
58-
)
43+
mask = ('''
44+
id,
45+
name,
46+
cpuCount,
47+
memoryCapacity,
48+
diskCapacity,
49+
createDate,
50+
modifyDate,
51+
backendRouter[
52+
id,
53+
hostname,
54+
domain
55+
],
56+
billingItem[
57+
id,
58+
nextInvoiceTotalRecurringAmount,
59+
children[
60+
categoryCode,
61+
nextInvoiceTotalRecurringAmount
62+
],
63+
orderItem[
64+
id,
65+
order.userRecord[
66+
username
67+
]
68+
]
69+
],
70+
datacenter[
71+
id,
72+
name,
73+
longName
74+
],
75+
guests[
76+
id,
77+
hostname,
78+
domain,
79+
uuid
80+
],
81+
guestCount
82+
''')
5983
self.dedicated_host.host.getObject.assert_called_once_with(id=12345, mask=mask)
6084

6185
def test_place_order(self):

0 commit comments

Comments
 (0)