Add "qinq-vlan" and "no-qinq-vlan" params to the "network create" cmd
Depends-On: https://review.opendev.org/c/openstack/openstacksdk/+/939703 Related-Bug: #1915151 Change-Id: Icacf83c20c3650a9d75f665f020b8818e1b4a585
This commit is contained in:
parent
e761ef8e32
commit
3412147372
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
from cliff import columns as cliff_columns
|
from cliff import columns as cliff_columns
|
||||||
from osc_lib.cli import format_columns
|
from osc_lib.cli import format_columns
|
||||||
|
from osc_lib import exceptions
|
||||||
from osc_lib import utils
|
from osc_lib import utils
|
||||||
from osc_lib.utils import tags as _tag
|
from osc_lib.utils import tags as _tag
|
||||||
|
|
||||||
@ -60,11 +61,7 @@ def _get_columns_network(item):
|
|||||||
'ipv6_address_scope_id': 'ipv6_address_scope',
|
'ipv6_address_scope_id': 'ipv6_address_scope',
|
||||||
'tags': 'tags',
|
'tags': 'tags',
|
||||||
}
|
}
|
||||||
# TODO(slaweq): temporary, until
|
hidden_columns = ['location', 'tenant_id']
|
||||||
# https://review.opendev.org/c/openstack/openstacksdk/+/939703 will be
|
|
||||||
# merged this new column should be hidden from the output (it is just to
|
|
||||||
# make unit tests in the openstacksdk patch happy)
|
|
||||||
hidden_columns = ['location', 'tenant_id', 'is_vlan_qinq']
|
|
||||||
return utils.get_osc_show_columns_for_sdk_resource(
|
return utils.get_osc_show_columns_for_sdk_resource(
|
||||||
item, column_map, hidden_columns
|
item, column_map, hidden_columns
|
||||||
)
|
)
|
||||||
@ -353,6 +350,25 @@ class CreateNetwork(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vlan_qinq_grp = parser.add_mutually_exclusive_group()
|
||||||
|
vlan_qinq_grp.add_argument(
|
||||||
|
'--qinq-vlan',
|
||||||
|
action='store_true',
|
||||||
|
help=self.enhance_help_neutron(
|
||||||
|
_("Enable VLAN QinQ (S-Tag ethtype 0x8a88) " "for the network")
|
||||||
|
),
|
||||||
|
)
|
||||||
|
vlan_qinq_grp.add_argument(
|
||||||
|
'--no-qinq-vlan',
|
||||||
|
action='store_true',
|
||||||
|
help=self.enhance_help_neutron(
|
||||||
|
_(
|
||||||
|
"Disable VLAN QinQ (S-Tag ethtype 0x8a88) "
|
||||||
|
"for the network"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
_add_additional_network_options(parser)
|
_add_additional_network_options(parser)
|
||||||
_tag.add_tag_option_to_parser_for_create(
|
_tag.add_tag_option_to_parser_for_create(
|
||||||
parser, _('network'), enhance_help=self.enhance_help_neutron
|
parser, _('network'), enhance_help=self.enhance_help_neutron
|
||||||
@ -376,6 +392,19 @@ class CreateNetwork(
|
|||||||
attrs['vlan_transparent'] = True
|
attrs['vlan_transparent'] = True
|
||||||
if parsed_args.no_transparent_vlan:
|
if parsed_args.no_transparent_vlan:
|
||||||
attrs['vlan_transparent'] = False
|
attrs['vlan_transparent'] = False
|
||||||
|
|
||||||
|
if parsed_args.qinq_vlan:
|
||||||
|
attrs['vlan_qinq'] = True
|
||||||
|
if parsed_args.no_qinq_vlan:
|
||||||
|
attrs['vlan_qinq'] = False
|
||||||
|
|
||||||
|
if attrs.get('vlan_transparent') and attrs.get('vlan_qinq'):
|
||||||
|
msg = _(
|
||||||
|
"--transparent-vlan and --qinq-vlan can not be both enabled "
|
||||||
|
"for the network."
|
||||||
|
)
|
||||||
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
attrs.update(
|
attrs.update(
|
||||||
self._parse_extra_properties(parsed_args.extra_properties)
|
self._parse_extra_properties(parsed_args.extra_properties)
|
||||||
)
|
)
|
||||||
|
@ -1419,6 +1419,7 @@ def create_one_network(attrs=None):
|
|||||||
'availability_zone_hints': [],
|
'availability_zone_hints': [],
|
||||||
'is_default': False,
|
'is_default': False,
|
||||||
'is_vlan_transparent': True,
|
'is_vlan_transparent': True,
|
||||||
|
'is_vlan_qinq': False,
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
||||||
'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex,
|
'ipv4_address_scope': 'ipv4' + uuid.uuid4().hex,
|
||||||
|
@ -63,6 +63,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'ipv6_address_scope',
|
'ipv6_address_scope',
|
||||||
'is_default',
|
'is_default',
|
||||||
'is_vlan_transparent',
|
'is_vlan_transparent',
|
||||||
|
'is_vlan_qinq',
|
||||||
'mtu',
|
'mtu',
|
||||||
'name',
|
'name',
|
||||||
'port_security_enabled',
|
'port_security_enabled',
|
||||||
@ -103,6 +104,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
network.RouterExternalColumn(_network.is_router_external),
|
network.RouterExternalColumn(_network.is_router_external),
|
||||||
_network.is_shared,
|
_network.is_shared,
|
||||||
_network.is_vlan_transparent,
|
_network.is_vlan_transparent,
|
||||||
|
_network.is_vlan_qinq,
|
||||||
_network.status,
|
_network.status,
|
||||||
_network.segments,
|
_network.segments,
|
||||||
format_columns.ListColumn(_network.subnet_ids),
|
format_columns.ListColumn(_network.subnet_ids),
|
||||||
@ -190,6 +192,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
"--qos-policy",
|
"--qos-policy",
|
||||||
self.qos_policy.id,
|
self.qos_policy.id,
|
||||||
"--transparent-vlan",
|
"--transparent-vlan",
|
||||||
|
"--no-qinq-vlan",
|
||||||
"--enable-port-security",
|
"--enable-port-security",
|
||||||
"--dns-domain",
|
"--dns-domain",
|
||||||
"example.org.",
|
"example.org.",
|
||||||
@ -210,6 +213,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
('segmentation_id', '400'),
|
('segmentation_id', '400'),
|
||||||
('qos_policy', self.qos_policy.id),
|
('qos_policy', self.qos_policy.id),
|
||||||
('transparent_vlan', True),
|
('transparent_vlan', True),
|
||||||
|
('qinq_vlan', False),
|
||||||
('enable_port_security', True),
|
('enable_port_security', True),
|
||||||
('name', self._network.name),
|
('name', self._network.name),
|
||||||
('dns_domain', 'example.org.'),
|
('dns_domain', 'example.org.'),
|
||||||
@ -234,6 +238,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'provider:segmentation_id': '400',
|
'provider:segmentation_id': '400',
|
||||||
'qos_policy_id': self.qos_policy.id,
|
'qos_policy_id': self.qos_policy.id,
|
||||||
'vlan_transparent': True,
|
'vlan_transparent': True,
|
||||||
|
'vlan_qinq': False,
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
'dns_domain': 'example.org.',
|
'dns_domain': 'example.org.',
|
||||||
}
|
}
|
||||||
@ -246,6 +251,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
"--enable",
|
"--enable",
|
||||||
"--no-share",
|
"--no-share",
|
||||||
"--disable-port-security",
|
"--disable-port-security",
|
||||||
|
"--qinq-vlan",
|
||||||
self._network.name,
|
self._network.name,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
@ -253,6 +259,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
('no_share', True),
|
('no_share', True),
|
||||||
('name', self._network.name),
|
('name', self._network.name),
|
||||||
('external', False),
|
('external', False),
|
||||||
|
('qinq_vlan', True),
|
||||||
('disable_port_security', True),
|
('disable_port_security', True),
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -264,6 +271,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'admin_state_up': True,
|
'admin_state_up': True,
|
||||||
'name': self._network.name,
|
'name': self._network.name,
|
||||||
'shared': False,
|
'shared': False,
|
||||||
|
'vlan_qinq': True,
|
||||||
'port_security_enabled': False,
|
'port_security_enabled': False,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -309,6 +317,19 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
def test_create_with_no_tag(self):
|
def test_create_with_no_tag(self):
|
||||||
self._test_create_with_tag(add_tags=False)
|
self._test_create_with_tag(add_tags=False)
|
||||||
|
|
||||||
|
def test_create_with_vlan_qinq_and_transparency_enabled(self):
|
||||||
|
arglist = [
|
||||||
|
"--transparent-vlan",
|
||||||
|
"--qinq-vlan",
|
||||||
|
self._network.name,
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
self.assertRaises(
|
||||||
|
exceptions.CommandError, self.cmd.take_action, parsed_args
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestCreateNetworkIdentityV2(
|
class TestCreateNetworkIdentityV2(
|
||||||
identity_fakes_v2.FakeClientMixin,
|
identity_fakes_v2.FakeClientMixin,
|
||||||
@ -332,6 +353,7 @@ class TestCreateNetworkIdentityV2(
|
|||||||
'ipv6_address_scope',
|
'ipv6_address_scope',
|
||||||
'is_default',
|
'is_default',
|
||||||
'is_vlan_transparent',
|
'is_vlan_transparent',
|
||||||
|
'is_vlan_qinq',
|
||||||
'mtu',
|
'mtu',
|
||||||
'name',
|
'name',
|
||||||
'port_security_enabled',
|
'port_security_enabled',
|
||||||
@ -372,6 +394,7 @@ class TestCreateNetworkIdentityV2(
|
|||||||
network.RouterExternalColumn(_network.is_router_external),
|
network.RouterExternalColumn(_network.is_router_external),
|
||||||
_network.is_shared,
|
_network.is_shared,
|
||||||
_network.is_vlan_transparent,
|
_network.is_vlan_transparent,
|
||||||
|
_network.is_vlan_qinq,
|
||||||
_network.status,
|
_network.status,
|
||||||
_network.segments,
|
_network.segments,
|
||||||
format_columns.ListColumn(_network.subnet_ids),
|
format_columns.ListColumn(_network.subnet_ids),
|
||||||
@ -1149,6 +1172,7 @@ class TestShowNetwork(TestNetwork):
|
|||||||
'ipv6_address_scope',
|
'ipv6_address_scope',
|
||||||
'is_default',
|
'is_default',
|
||||||
'is_vlan_transparent',
|
'is_vlan_transparent',
|
||||||
|
'is_vlan_qinq',
|
||||||
'mtu',
|
'mtu',
|
||||||
'name',
|
'name',
|
||||||
'port_security_enabled',
|
'port_security_enabled',
|
||||||
@ -1189,6 +1213,7 @@ class TestShowNetwork(TestNetwork):
|
|||||||
network.RouterExternalColumn(_network.is_router_external),
|
network.RouterExternalColumn(_network.is_router_external),
|
||||||
_network.is_shared,
|
_network.is_shared,
|
||||||
_network.is_vlan_transparent,
|
_network.is_vlan_transparent,
|
||||||
|
_network.is_vlan_qinq,
|
||||||
_network.status,
|
_network.status,
|
||||||
_network.segments,
|
_network.segments,
|
||||||
format_columns.ListColumn(_network.subnet_ids),
|
format_columns.ListColumn(_network.subnet_ids),
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add ``qinq-vlan`` and ``no-qinq-vlan`` arguments to the ``network create``
|
||||||
|
command. It will enable/disable QinQ feature for the created network.
|
||||||
|
This new argument is mutually exclusive with the ``transparent-vlan`` - only
|
||||||
|
one of them can be set to ``True`` for the network.
|
Loading…
x
Reference in New Issue
Block a user