Skip to content

Commit 44f2f2e

Browse files
committed
Adds lookup for location, package and size
1 parent 258c215 commit 44f2f2e

2 files changed

Lines changed: 37 additions & 7 deletions

File tree

SoftLayer/CLI/server/create.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
help="The ID of the private VLAN on which you want the virtual "
4040
"server placed",
4141
type=click.INT)
42-
@click.option('--extras', default='', help="Extra options; comma-separated")
42+
@helpers.multi_option('--extra', '-e', help="Extra options")
4343
@click.option('--wait',
4444
type=click.INT,
4545
help="Wait until the server is finished provisioning for up to "
@@ -59,6 +59,10 @@ def cli(env, **args):
5959
key_id = helpers.resolve_id(resolver, key, 'SshKey')
6060
ssh_keys.append(key_id)
6161

62+
extras = []
63+
if args.get('extras'):
64+
extras = args.get('extras').split(',')
65+
6266
order = {
6367
'hostname': args['hostname'],
6468
'domain': args['domain'],
@@ -72,7 +76,7 @@ def cli(env, **args):
7276
'hourly': args.get('billing') == 'hourly',
7377
'port_speed': args.get('port_speed'),
7478
'no_public': args.get('no_public') or False,
75-
'extras': args.get('extras').split(','),
79+
'extras': extras,
7680
}
7781

7882
# Do not create hardware server with --test or --export

SoftLayer/managers/hardware.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,16 @@ def _generate_create_dict(self,
335335
softwareDescription[id,referenceCode],
336336
prices
337337
],
338+
activePresets,
338339
regions[location[location]]
339340
'''
340-
package = self.client['Product_Package'].getObject(id=200,
341-
mask=package_mask)
341+
_filter = {
342+
'type': {'keyName': {'operation': 'BARE_METAL_CPU_FAST_PROVISION'}}
343+
}
344+
package_service = self.client['Product_Package']
345+
package = package_service.getAllObjects(filter=_filter,
346+
mask=package_mask,
347+
limit=1)
342348

343349
prices = []
344350
for category in ['pri_ip_addresses',
@@ -353,18 +359,20 @@ def _generate_create_dict(self,
353359
prices.append(_get_bandwidth_price_id(package['items'],
354360
hourly=hourly,
355361
no_public=no_public))
362+
356363
prices.append(_get_port_speed_price_id(package['items'],
357364
port_speed,
358365
no_public))
366+
359367
for extra in extras:
360368
prices.append(_get_extra_price_id(package['items'], extra, hourly))
361369

362370
order = {
363371
'hardware': [hardware],
364-
'location': datacenter, # TODO: lookup OS price id based on keyname instead of a name like "HONGKONG02"
372+
'location': _get_location_long_name(package, datacenter),
365373
'prices': [{'id': price} for price in prices],
366-
'packageId': 200, # TODO: Look this up based on package type
367-
'presetId': 70, # TODO: Verify that preset id is a thing
374+
'packageId': package['id'],
375+
'presetId': _get_preset_id(package, size),
368376
'useHourlyPricing': hourly,
369377
}
370378

@@ -574,3 +582,21 @@ def is_private_port_speed_item(item):
574582
return True
575583

576584
return False
585+
586+
587+
def _get_location_long_name(package, datacenter):
588+
for region in package['regions']:
589+
if region['location']['location']['name'] == datacenter:
590+
return region['keyname']
591+
592+
raise SoftLayer.SoftLayerError("Could not find valid location for: '%s'"
593+
% datacenter)
594+
595+
596+
def _get_preset_id(package, size):
597+
for preset in package['activePresets']:
598+
if preset['keyName'] == size:
599+
return preset['id']
600+
601+
raise SoftLayer.SoftLayerError("Could not find valid size for: '%s'"
602+
% size)

0 commit comments

Comments
 (0)