diff options
Diffstat (limited to 'openstackclient/compute')
| -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 = {} |
