summaryrefslogtreecommitdiff
path: root/openstackclient/compute/v2/server.py
diff options
context:
space:
mode:
authorzhiyuan_cai <luckyvega.g@gmail.com>2014-12-26 17:17:35 +0800
committerSteve Martinelli <stevemar@ca.ibm.com>2015-01-27 05:34:32 +0000
commit520b2f10cf0218509ca6cab7439214be812b425e (patch)
tree725325e886ebefc784402cdecebebabc6523f3a7 /openstackclient/compute/v2/server.py
parent703a25d445d7b710212633af3a12d8c168208c62 (diff)
downloadpython-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/server.py')
-rw-r--r--openstackclient/compute/v2/server.py36
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 = {}