Merge pull request #137 from danwent/master
novaclient changes to use os-create-server API extensions for v1.1 (pushing through to prepare for gerrit move)
This commit is contained in:
commit
897592d8e3
@ -26,7 +26,7 @@ class BootingManagerWithFind(base.ManagerWithFind):
|
||||
meta=None, files=None, zone_blob=None, userdata=None,
|
||||
reservation_id=None, return_raw=False, min_count=None,
|
||||
max_count=None, security_groups=None, key_name=None,
|
||||
availability_zone=None, block_device_mapping=None):
|
||||
availability_zone=None, block_device_mapping=None, nics=None):
|
||||
"""
|
||||
Create (boot) a new server.
|
||||
|
||||
@ -53,6 +53,9 @@ class BootingManagerWithFind(base.ManagerWithFind):
|
||||
:param availability_zone: The :class:`Zone`.
|
||||
:param block_device_mapping: A dict of block device mappings for this
|
||||
server.
|
||||
:param nics: (optional extension) an ordered list of nics to be
|
||||
added to this server, with information about
|
||||
connected networks, fixed ips, etc.
|
||||
"""
|
||||
body = {"server": {
|
||||
"name": name,
|
||||
@ -129,5 +132,17 @@ class BootingManagerWithFind(base.ManagerWithFind):
|
||||
bdm_dict['delete_on_termination'] = mapping_parts[3]
|
||||
bdm.append(bdm_dict)
|
||||
|
||||
if nics:
|
||||
all_net_data = []
|
||||
for nic_info in nics:
|
||||
net_data = {}
|
||||
# if value is empty string, do not send value in body
|
||||
if nic_info['net-id']:
|
||||
net_data['uuid'] = nic_info['net-id']
|
||||
if nic_info['v4-fixed-ip']:
|
||||
net_data['fixed_ip'] = nic_info['v4-fixed-ip']
|
||||
all_net_data.append(net_data)
|
||||
body['server']['networks'] = all_net_data
|
||||
|
||||
return self._create(resource_url, body, response_key,
|
||||
return_raw=return_raw)
|
||||
|
@ -328,7 +328,7 @@ class ServerManager(local_base.BootingManagerWithFind):
|
||||
zone_blob=None, reservation_id=None, min_count=None,
|
||||
max_count=None, security_groups=None, userdata=None,
|
||||
key_name=None, availability_zone=None,
|
||||
block_device_mapping=None):
|
||||
block_device_mapping=None, nics=None):
|
||||
# TODO: (anthony) indicate in doc string if param is an extension
|
||||
# and/or optional
|
||||
"""
|
||||
@ -357,6 +357,9 @@ class ServerManager(local_base.BootingManagerWithFind):
|
||||
:param availability_zone: The :class:`Zone`.
|
||||
:param block_device_mapping: (optional extension) A dict of block device
|
||||
mappings for this server.
|
||||
:param nics: (optional extension) an ordered list of nics to be
|
||||
added to this server, with information about
|
||||
connected networks, fixed ips, etc.
|
||||
"""
|
||||
if not min_count:
|
||||
min_count = 1
|
||||
@ -379,7 +382,7 @@ class ServerManager(local_base.BootingManagerWithFind):
|
||||
zone_blob=zone_blob, reservation_id=reservation_id,
|
||||
min_count=min_count, max_count=max_count,
|
||||
security_groups=security_groups, key_name=key_name,
|
||||
availability_zone=availability_zone)
|
||||
availability_zone=availability_zone, nics=nics)
|
||||
|
||||
def update(self, server, name=None):
|
||||
"""
|
||||
|
@ -111,10 +111,17 @@ def _boot(cs, args, reservation_id=None, min_count=None, max_count=None):
|
||||
device_name, mapping = bdm.split('=', 1)
|
||||
block_device_mapping[device_name] = mapping
|
||||
|
||||
nics = []
|
||||
for nic_str in args.nics:
|
||||
nic_info = {"net-id": "", "v4-fixed-ip": ""}
|
||||
for kv_str in nic_str.split(","):
|
||||
k,v = kv_str.split("=")
|
||||
nic_info[k] = v
|
||||
nics.append(nic_info)
|
||||
|
||||
return (args.name, image, flavor, metadata, files, key_name,
|
||||
reservation_id, min_count, max_count, user_data, \
|
||||
availability_zone, security_groups, block_device_mapping)
|
||||
|
||||
availability_zone, security_groups, block_device_mapping, nics)
|
||||
|
||||
|
||||
@utils.arg('--flavor',
|
||||
@ -168,11 +175,20 @@ def _boot(cs, args, reservation_id=None, min_count=None, max_count=None):
|
||||
default=[],
|
||||
help="Block device mapping in the format "
|
||||
"<dev_name=<id>:<type>:<size(GB)>:<delete_on_terminate>.")
|
||||
@utils.arg('--nic',
|
||||
metavar="<net-id=net-uuid,v4-fixed-ip=ip-addr>",
|
||||
action='append',
|
||||
dest='nics',
|
||||
default=[],
|
||||
help="Create a NIC on the server.\n"
|
||||
"Specify option multiple times to create multiple NICs.\n"
|
||||
"net-id: attach NIC to network with this UUID (optional)\n"
|
||||
"v4-fixed-ip: IPv4 fixed address for NIC (optional).")
|
||||
def do_boot(cs, args):
|
||||
"""Boot a new server."""
|
||||
name, image, flavor, metadata, files, key_name, reservation_id, \
|
||||
min_count, max_count, user_data, availability_zone, \
|
||||
security_groups, block_device_mapping = _boot(cs, args)
|
||||
security_groups, block_device_mapping, nics = _boot(cs, args)
|
||||
|
||||
server = cs.servers.create(args.name, image, flavor,
|
||||
meta=metadata,
|
||||
@ -183,7 +199,8 @@ def do_boot(cs, args):
|
||||
availability_zone=availability_zone,
|
||||
security_groups=security_groups,
|
||||
key_name=key_name,
|
||||
block_device_mapping=block_device_mapping)
|
||||
block_device_mapping=block_device_mapping,
|
||||
nics=nics)
|
||||
|
||||
# Keep any information (like adminPass) returned by create
|
||||
info = server._info
|
||||
|
Loading…
x
Reference in New Issue
Block a user