Merge "Add QoS support to Network object."
This commit is contained in:
commit
b12782726f
doc/source/command-objects
openstackclient
releasenotes/notes
@ -30,6 +30,7 @@ Create new network
|
|||||||
[--provider-network-type <provider-network-type>]
|
[--provider-network-type <provider-network-type>]
|
||||||
[--provider-physical-network <provider-physical-network>]
|
[--provider-physical-network <provider-physical-network>]
|
||||||
[--provider-segment <provider-segment>]
|
[--provider-segment <provider-segment>]
|
||||||
|
[--qos-policy <qos-policy>]
|
||||||
[--transparent-vlan | --no-transparent-vlan]
|
[--transparent-vlan | --no-transparent-vlan]
|
||||||
<name>
|
<name>
|
||||||
|
|
||||||
@ -144,6 +145,12 @@ Create new network
|
|||||||
|
|
||||||
*Network version 2 only*
|
*Network version 2 only*
|
||||||
|
|
||||||
|
.. option:: --qos-policy <qos-policy>
|
||||||
|
|
||||||
|
QoS policy to attach to this network (name or ID)
|
||||||
|
|
||||||
|
*Network version 2 only*
|
||||||
|
|
||||||
.. option:: --transparent-vlan
|
.. option:: --transparent-vlan
|
||||||
|
|
||||||
Make the network VLAN transparent
|
Make the network VLAN transparent
|
||||||
@ -303,6 +310,7 @@ Set network properties
|
|||||||
[--provider-network-type <provider-network-type>]
|
[--provider-network-type <provider-network-type>]
|
||||||
[--provider-physical-network <provider-physical-network>]
|
[--provider-physical-network <provider-physical-network>]
|
||||||
[--provider-segment <provider-segment>]
|
[--provider-segment <provider-segment>]
|
||||||
|
[--qos-policy <qos-policy> | --no-qos-policy]
|
||||||
[--transparent-vlan | --no-transparent-vlan]
|
[--transparent-vlan | --no-transparent-vlan]
|
||||||
<network>
|
<network>
|
||||||
|
|
||||||
@ -370,6 +378,14 @@ Set network properties
|
|||||||
|
|
||||||
VLAN ID for VLAN networks or Tunnel ID for GRE/VXLAN networks
|
VLAN ID for VLAN networks or Tunnel ID for GRE/VXLAN networks
|
||||||
|
|
||||||
|
.. option:: --qos-policy <qos-policy>
|
||||||
|
|
||||||
|
QoS policy to attach to this network (name or ID)
|
||||||
|
|
||||||
|
.. option:: --no-qos-policy
|
||||||
|
|
||||||
|
Remove the QoS policy attached to this network
|
||||||
|
|
||||||
.. option:: --transparent-vlan
|
.. option:: --transparent-vlan
|
||||||
|
|
||||||
Make the network VLAN transparent
|
Make the network VLAN transparent
|
||||||
|
@ -99,6 +99,13 @@ def _get_attrs(client_manager, parsed_args):
|
|||||||
attrs['provider:physical_network'] = parsed_args.physical_network
|
attrs['provider:physical_network'] = parsed_args.physical_network
|
||||||
if parsed_args.segmentation_id:
|
if parsed_args.segmentation_id:
|
||||||
attrs['provider:segmentation_id'] = parsed_args.segmentation_id
|
attrs['provider:segmentation_id'] = parsed_args.segmentation_id
|
||||||
|
if parsed_args.qos_policy is not None:
|
||||||
|
network_client = client_manager.network
|
||||||
|
_qos_policy = network_client.find_qos_policy(parsed_args.qos_policy,
|
||||||
|
ignore_missing=False)
|
||||||
|
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 VLAN Transparency for networks
|
# Update VLAN Transparency for networks
|
||||||
if parsed_args.transparent_vlan:
|
if parsed_args.transparent_vlan:
|
||||||
attrs['vlan_transparent'] = True
|
attrs['vlan_transparent'] = True
|
||||||
@ -249,6 +256,11 @@ class CreateNetwork(common.NetworkAndComputeShowOne):
|
|||||||
help=_("Do not use the network as the default external network "
|
help=_("Do not use the network as the default external network "
|
||||||
"(default)")
|
"(default)")
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--qos-policy',
|
||||||
|
metavar='<qos-policy>',
|
||||||
|
help=_("QoS policy to attach to this network (name or ID)")
|
||||||
|
)
|
||||||
_add_additional_network_options(parser)
|
_add_additional_network_options(parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -572,6 +584,17 @@ class SetNetwork(command.Command):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
help=_("Do not use the network as the default external network")
|
help=_("Do not use the network as the default external network")
|
||||||
)
|
)
|
||||||
|
qos_group = parser.add_mutually_exclusive_group()
|
||||||
|
qos_group.add_argument(
|
||||||
|
'--qos-policy',
|
||||||
|
metavar='<qos-policy>',
|
||||||
|
help=_("QoS policy to attach to this network (name or ID)")
|
||||||
|
)
|
||||||
|
qos_group.add_argument(
|
||||||
|
'--no-qos-policy',
|
||||||
|
action='store_true',
|
||||||
|
help=_("Remove the QoS policy attached to this network")
|
||||||
|
)
|
||||||
_add_additional_network_options(parser)
|
_add_additional_network_options(parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
@ -299,6 +299,7 @@ class FakeNetwork(object):
|
|||||||
'availability_zone_hints': [],
|
'availability_zone_hints': [],
|
||||||
'is_default': False,
|
'is_default': False,
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
|
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Overwrite default attributes.
|
# Overwrite default attributes.
|
||||||
|
@ -53,6 +53,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'availability_zone_hints': ["nova"],
|
'availability_zone_hints': ["nova"],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
qos_policy = (network_fakes.FakeNetworkQosPolicy.
|
||||||
|
create_one_qos_policy(attrs={'id': _network.qos_policy_id}))
|
||||||
|
|
||||||
columns = (
|
columns = (
|
||||||
'admin_state_up',
|
'admin_state_up',
|
||||||
@ -67,6 +69,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'provider_network_type',
|
'provider_network_type',
|
||||||
'provider_physical_network',
|
'provider_physical_network',
|
||||||
'provider_segmentation_id',
|
'provider_segmentation_id',
|
||||||
|
'qos_policy_id',
|
||||||
'router:external',
|
'router:external',
|
||||||
'shared',
|
'shared',
|
||||||
'status',
|
'status',
|
||||||
@ -86,6 +89,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
_network.provider_network_type,
|
_network.provider_network_type,
|
||||||
_network.provider_physical_network,
|
_network.provider_physical_network,
|
||||||
_network.provider_segmentation_id,
|
_network.provider_segmentation_id,
|
||||||
|
_network.qos_policy_id,
|
||||||
network._format_router_external(_network.is_router_external),
|
network._format_router_external(_network.is_router_external),
|
||||||
_network.shared,
|
_network.shared,
|
||||||
_network.status,
|
_network.status,
|
||||||
@ -102,6 +106,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
|
|
||||||
self.projects_mock.get.return_value = self.project
|
self.projects_mock.get.return_value = self.project
|
||||||
self.domains_mock.get.return_value = self.domain
|
self.domains_mock.get.return_value = self.domain
|
||||||
|
self.network.find_qos_policy = mock.Mock(return_value=self.qos_policy)
|
||||||
|
|
||||||
def test_create_no_options(self):
|
def test_create_no_options(self):
|
||||||
arglist = []
|
arglist = []
|
||||||
@ -144,6 +149,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
"--provider-network-type", "vlan",
|
"--provider-network-type", "vlan",
|
||||||
"--provider-physical-network", "physnet1",
|
"--provider-physical-network", "physnet1",
|
||||||
"--provider-segment", "400",
|
"--provider-segment", "400",
|
||||||
|
"--qos-policy", self.qos_policy.id,
|
||||||
"--transparent-vlan",
|
"--transparent-vlan",
|
||||||
"--enable-port-security",
|
"--enable-port-security",
|
||||||
self._network.name,
|
self._network.name,
|
||||||
@ -160,6 +166,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
('provider_network_type', 'vlan'),
|
('provider_network_type', 'vlan'),
|
||||||
('physical_network', 'physnet1'),
|
('physical_network', 'physnet1'),
|
||||||
('segmentation_id', '400'),
|
('segmentation_id', '400'),
|
||||||
|
('qos_policy', self.qos_policy.id),
|
||||||
('transparent_vlan', True),
|
('transparent_vlan', True),
|
||||||
('enable_port_security', True),
|
('enable_port_security', True),
|
||||||
('name', self._network.name),
|
('name', self._network.name),
|
||||||
@ -180,6 +187,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
|
|||||||
'provider:network_type': 'vlan',
|
'provider:network_type': 'vlan',
|
||||||
'provider:physical_network': 'physnet1',
|
'provider:physical_network': 'physnet1',
|
||||||
'provider:segmentation_id': '400',
|
'provider:segmentation_id': '400',
|
||||||
|
'qos_policy_id': self.qos_policy.id,
|
||||||
'vlan_transparent': True,
|
'vlan_transparent': True,
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
})
|
})
|
||||||
@ -235,6 +243,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
|
|||||||
'provider_network_type',
|
'provider_network_type',
|
||||||
'provider_physical_network',
|
'provider_physical_network',
|
||||||
'provider_segmentation_id',
|
'provider_segmentation_id',
|
||||||
|
'qos_policy_id',
|
||||||
'router:external',
|
'router:external',
|
||||||
'shared',
|
'shared',
|
||||||
'status',
|
'status',
|
||||||
@ -254,6 +263,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
|
|||||||
_network.provider_network_type,
|
_network.provider_network_type,
|
||||||
_network.provider_physical_network,
|
_network.provider_physical_network,
|
||||||
_network.provider_segmentation_id,
|
_network.provider_segmentation_id,
|
||||||
|
_network.qos_policy_id,
|
||||||
network._format_router_external(_network.is_router_external),
|
network._format_router_external(_network.is_router_external),
|
||||||
_network.shared,
|
_network.shared,
|
||||||
_network.status,
|
_network.status,
|
||||||
@ -745,6 +755,8 @@ class TestSetNetwork(TestNetwork):
|
|||||||
|
|
||||||
# The network to set.
|
# The network to set.
|
||||||
_network = network_fakes.FakeNetwork.create_one_network()
|
_network = network_fakes.FakeNetwork.create_one_network()
|
||||||
|
qos_policy = (network_fakes.FakeNetworkQosPolicy.
|
||||||
|
create_one_qos_policy(attrs={'id': _network.qos_policy_id}))
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestSetNetwork, self).setUp()
|
super(TestSetNetwork, self).setUp()
|
||||||
@ -752,6 +764,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
self.network.update_network = mock.Mock(return_value=None)
|
self.network.update_network = mock.Mock(return_value=None)
|
||||||
|
|
||||||
self.network.find_network = mock.Mock(return_value=self._network)
|
self.network.find_network = mock.Mock(return_value=self._network)
|
||||||
|
self.network.find_qos_policy = mock.Mock(return_value=self.qos_policy)
|
||||||
|
|
||||||
# Get the command object to test
|
# Get the command object to test
|
||||||
self.cmd = network.SetNetwork(self.app, self.namespace)
|
self.cmd = network.SetNetwork(self.app, self.namespace)
|
||||||
@ -770,6 +783,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
'--provider-segment', '400',
|
'--provider-segment', '400',
|
||||||
'--no-transparent-vlan',
|
'--no-transparent-vlan',
|
||||||
'--enable-port-security',
|
'--enable-port-security',
|
||||||
|
'--qos-policy', self.qos_policy.name,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('network', self._network.name),
|
('network', self._network.name),
|
||||||
@ -784,6 +798,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
('segmentation_id', '400'),
|
('segmentation_id', '400'),
|
||||||
('no_transparent_vlan', True),
|
('no_transparent_vlan', True),
|
||||||
('enable_port_security', True),
|
('enable_port_security', True),
|
||||||
|
('qos_policy', self.qos_policy.name),
|
||||||
]
|
]
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
@ -801,6 +816,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
'provider:segmentation_id': '400',
|
'provider:segmentation_id': '400',
|
||||||
'vlan_transparent': False,
|
'vlan_transparent': False,
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
|
'qos_policy_id': self.qos_policy.id,
|
||||||
}
|
}
|
||||||
self.network.update_network.assert_called_once_with(
|
self.network.update_network.assert_called_once_with(
|
||||||
self._network, **attrs)
|
self._network, **attrs)
|
||||||
@ -813,6 +829,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
'--no-share',
|
'--no-share',
|
||||||
'--internal',
|
'--internal',
|
||||||
'--disable-port-security',
|
'--disable-port-security',
|
||||||
|
'--no-qos-policy',
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('network', self._network.name),
|
('network', self._network.name),
|
||||||
@ -820,6 +837,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
('no_share', True),
|
('no_share', True),
|
||||||
('internal', True),
|
('internal', True),
|
||||||
('disable_port_security', True),
|
('disable_port_security', True),
|
||||||
|
('no_qos_policy', True),
|
||||||
]
|
]
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
@ -830,6 +848,7 @@ class TestSetNetwork(TestNetwork):
|
|||||||
'shared': False,
|
'shared': False,
|
||||||
'router:external': False,
|
'router:external': False,
|
||||||
'port_security_enabled': False,
|
'port_security_enabled': False,
|
||||||
|
'qos_policy_id': None,
|
||||||
}
|
}
|
||||||
self.network.update_network.assert_called_once_with(
|
self.network.update_network.assert_called_once_with(
|
||||||
self._network, **attrs)
|
self._network, **attrs)
|
||||||
@ -866,6 +885,7 @@ class TestShowNetwork(TestNetwork):
|
|||||||
'provider_network_type',
|
'provider_network_type',
|
||||||
'provider_physical_network',
|
'provider_physical_network',
|
||||||
'provider_segmentation_id',
|
'provider_segmentation_id',
|
||||||
|
'qos_policy_id',
|
||||||
'router:external',
|
'router:external',
|
||||||
'shared',
|
'shared',
|
||||||
'status',
|
'status',
|
||||||
@ -885,6 +905,7 @@ class TestShowNetwork(TestNetwork):
|
|||||||
_network.provider_network_type,
|
_network.provider_network_type,
|
||||||
_network.provider_physical_network,
|
_network.provider_physical_network,
|
||||||
_network.provider_segmentation_id,
|
_network.provider_segmentation_id,
|
||||||
|
_network.qos_policy_id,
|
||||||
network._format_router_external(_network.is_router_external),
|
network._format_router_external(_network.is_router_external),
|
||||||
_network.shared,
|
_network.shared,
|
||||||
_network.status,
|
_network.status,
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add QoS support for Network commands.
|
||||||
|
The new parameter ``qos-policy`` is added to ``network create`` and
|
||||||
|
``network set`` commands. This parameter is the name or the ID of the
|
||||||
|
network QoS policy to attach to this network.
|
||||||
|
[Bug `1627069 <https://bugs.launchpad.net/python-openstackclient/+bug/1627069>`_]
|
Loading…
x
Reference in New Issue
Block a user