diff options
| author | zhiyuan_cai <luckyvega.g@gmail.com> | 2014-12-26 17:17:35 +0800 |
|---|---|---|
| committer | Steve Martinelli <stevemar@ca.ibm.com> | 2015-01-27 05:34:32 +0000 |
| commit | 520b2f10cf0218509ca6cab7439214be812b425e (patch) | |
| tree | 725325e886ebefc784402cdecebebabc6523f3a7 /openstackclient/compute/v2 | |
| parent | 703a25d445d7b710212633af3a12d8c168208c62 (diff) | |
| download | python-openstackclient-520b2f10cf0218509ca6cab7439214be812b425e.tar.gz | |
Add 'find by name' to --nic for creating server
Add 'find by name' feature to --nic option for creating server.
Closes-Bug: #1353040
Change-Id: Idd0a30415d8360a57e33efedf2467593652683d4
Diffstat (limited to 'openstackclient/compute/v2')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index a5d8b0c3..7259e424 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -32,6 +32,7 @@ from openstackclient.common import exceptions from openstackclient.common import parseractions from openstackclient.common import utils from openstackclient.i18n import _ # noqa +from openstackclient.network import common def _format_servers_list_networks(networks): @@ -187,6 +188,10 @@ class CreateServer(show.ShowOne): log = logging.getLogger(__name__ + '.CreateServer') + def _is_neutron_enabled(self): + service_catalog = self.app.client_manager.auth_ref.service_catalog + return 'network' in service_catalog.get_endpoints() + def get_parser(self, prog_name): parser = super(CreateServer, self).get_parser(prog_name) parser.add_argument( @@ -372,10 +377,39 @@ class CreateServer(show.ShowOne): block_device_mapping.update({dev_key: block_volume}) nics = [] + if parsed_args.nic: + neutron_enabled = self._is_neutron_enabled() for nic_str in parsed_args.nic: - nic_info = {"net-id": "", "v4-fixed-ip": ""} + nic_info = {"net-id": "", "v4-fixed-ip": "", + "v6-fixed-ip": "", "port-id": ""} nic_info.update(dict(kv_str.split("=", 1) for kv_str in nic_str.split(","))) + if bool(nic_info["net-id"]) == bool(nic_info["port-id"]): + msg = _("either net-id or port-id should be specified " + "but not both") + raise exceptions.CommandError(msg) + if neutron_enabled: + network_client = self.app.client_manager.network + if nic_info["net-id"]: + nic_info["net-id"] = common.find(network_client, + 'network', + 'networks', + nic_info["net-id"]) + if nic_info["port-id"]: + nic_info["port-id"] = common.find(network_client, + 'port', + 'ports', + nic_info["port-id"]) + else: + if nic_info["net-id"]: + nic_info["net-id"] = utils.find_resource( + compute_client.networks, + nic_info["net-id"] + ).id + if nic_info["port-id"]: + msg = _("can't create server with port specified " + "since neutron not enabled") + raise exceptions.CommandError(msg) nics.append(nic_info) hints = {} |
