summaryrefslogtreecommitdiff
path: root/openstackclient/network
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-08-19 15:58:33 +0000
committerGerrit Code Review <review@openstack.org>2020-08-19 15:58:33 +0000
commit13e7d43b9777dd0719df5fb89ec7946ea761f5cf (patch)
treed4a36c43d97d2aac37e594ea60df9f2c051eeabb /openstackclient/network
parent3bcfe983c70c0bc6217b5e685edb379b5d54640c (diff)
parente7a8687a2c87a507ce25e042014d6a918e95d035 (diff)
downloadpython-openstackclient-stable/rocky.tar.gz
Merge "Add dns-domain support to Network object" into stable/rockystable/rocky
Diffstat (limited to 'openstackclient/network')
-rw-r--r--openstackclient/network/common.py25
-rw-r--r--openstackclient/network/v2/network.py18
-rw-r--r--openstackclient/network/v2/port.py14
3 files changed, 51 insertions, 6 deletions
diff --git a/openstackclient/network/common.py b/openstackclient/network/common.py
index 37bf1406..d22b2caa 100644
--- a/openstackclient/network/common.py
+++ b/openstackclient/network/common.py
@@ -12,6 +12,7 @@
#
import abc
+import contextlib
import logging
import openstack.exceptions
@@ -24,6 +25,30 @@ from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
+_required_opt_extensions_map = {
+ 'allowed_address_pairs': 'allowed-address-pairs',
+ 'dns_domain': 'dns-integration',
+ 'dns_name': 'dns-integration',
+ 'extra_dhcp_opts': 'extra_dhcp_opt',
+ 'qos_policy_id': 'qos',
+ 'security_groups': 'security-groups',
+}
+
+
+@contextlib.contextmanager
+def check_missing_extension_if_error(client_manager, attrs):
+ # If specified option requires extension, then try to
+ # find out if it exists. If it does not exist,
+ # then an exception with the appropriate message
+ # will be thrown from within client.find_extension
+ try:
+ yield
+ except openstack.exceptions.HttpException:
+ for opt, ext in _required_opt_extensions_map.items():
+ if opt in attrs:
+ client_manager.find_extension(ext, ignore_missing=False)
+ raise
+
@six.add_metaclass(abc.ABCMeta)
class NetworkAndComputeCommand(command.Command):
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index 2ce22c2e..f5123932 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -134,6 +134,9 @@ def _get_attrs_network(client_manager, parsed_args):
attrs['qos_policy_id'] = _qos_policy.id
if 'no_qos_policy' in parsed_args and parsed_args.no_qos_policy:
attrs['qos_policy_id'] = None
+ # Update DNS network options
+ if parsed_args.dns_domain:
+ attrs['dns_domain'] = parsed_args.dns_domain
return attrs
@@ -171,6 +174,13 @@ def _add_additional_network_options(parser):
dest='segmentation_id',
help=_("VLAN ID for VLAN networks or Tunnel ID for "
"GENEVE/GRE/VXLAN networks"))
+ parser.add_argument(
+ '--dns-domain',
+ metavar='<dns-domain>',
+ dest='dns_domain',
+ help=_("Set DNS domain for this network "
+ "(requires DNS integration extension)")
+ )
# TODO(sindhu): Use the SDK resource mapped attribute names once the
@@ -308,8 +318,10 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
attrs['vlan_transparent'] = True
if parsed_args.no_transparent_vlan:
attrs['vlan_transparent'] = False
+ with common.check_missing_extension_if_error(
+ self.app.client_manager.network, attrs):
+ obj = client.create_network(**attrs)
- obj = client.create_network(**attrs)
# tags cannot be set when created, so tags need to be set later.
_tag.update_tags_for_set(client, obj, parsed_args)
display_columns, columns = _get_columns_network(obj)
@@ -690,7 +702,9 @@ class SetNetwork(command.Command):
attrs = _get_attrs_network(self.app.client_manager, parsed_args)
if attrs:
- client.update_network(obj, **attrs)
+ with common.check_missing_extension_if_error(
+ self.app.client_manager.network, attrs):
+ client.update_network(obj, **attrs)
# tags is a subresource and it needs to be updated separately.
_tag.update_tags_for_set(client, obj, parsed_args)
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index c6d48941..4cbb7acd 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -25,6 +25,7 @@ from osc_lib import utils
from openstackclient.i18n import _
from openstackclient.identity import common as identity_common
+from openstackclient.network import common
from openstackclient.network import sdk_utils
from openstackclient.network.v2 import _tag
@@ -281,8 +282,8 @@ def _add_updatable_args(parser):
)
parser.add_argument(
'--dns-name',
- metavar='dns-name',
- help=_("Set DNS name to this port "
+ metavar='<dns-name>',
+ help=_("Set DNS name for this port "
"(requires DNS integration extension)")
)
@@ -437,7 +438,10 @@ class CreatePort(command.ShowOne):
if parsed_args.qos_policy:
attrs['qos_policy_id'] = client.find_qos_policy(
parsed_args.qos_policy, ignore_missing=False).id
- obj = client.create_port(**attrs)
+ with common.check_missing_extension_if_error(
+ self.app.client_manager.network, attrs):
+ obj = client.create_port(**attrs)
+
# tags cannot be set when created, so tags need to be set later.
_tag.update_tags_for_set(client, obj, parsed_args)
display_columns, columns = _get_columns(obj)
@@ -790,7 +794,9 @@ class SetPort(command.Command):
attrs['data_plane_status'] = parsed_args.data_plane_status
if attrs:
- client.update_port(obj, **attrs)
+ with common.check_missing_extension_if_error(
+ self.app.client_manager.network, attrs):
+ client.update_port(obj, **attrs)
# tags is a subresource and it needs to be updated separately.
_tag.update_tags_for_set(client, obj, parsed_args)