Browse Source

Add 'data_plane_status' option to Port classes

Adds 'data_plane_status' option to SetPort and UnsetPort classes.

Closes-Bug: #1684989
Change-Id: I26e23b551afb8c37e6babdea1655efb7c5c6873b
tags/3.12.0
Carlos Goncalves 3 years ago
parent
commit
1ae904a491
5 changed files with 95 additions and 0 deletions
  1. +12
    -0
      doc/source/cli/command-objects/port.rst
  2. +18
    -0
      openstackclient/network/v2/port.py
  3. +1
    -0
      openstackclient/tests/unit/network/v2/fakes.py
  4. +59
    -0
      openstackclient/tests/unit/network/v2/test_port.py
  5. +5
    -0
      releasenotes/notes/bug-1684989-3bda158a822d2f73.yaml

+ 12
- 0
doc/source/cli/command-objects/port.rst View File

@@ -232,6 +232,7 @@ Set port properties
[--dns-name <dns-name>]
[--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>]]
[--no-allowed-address]
[--data-plane-status <status>]
<port>

.. option:: --description <description>
@@ -335,6 +336,12 @@ Set port properties
(Specify both --allowed-address and --no-allowed-address
to overwrite the current allowed-address pairs)

.. option:: --data-plane-status

Set data plane status of this port (ACTIVE | DOWN).
Unset it to None with the 'port unset' command
(requires data plane status extension)

.. _port_set-port:
.. describe:: <port>

@@ -370,6 +377,7 @@ Unset port properties
[--security-group <security-group> [...]]
[--allowed-address ip-address=<ip-address>[,mac-address=<mac-address>] [...]]
[--qos-policy]
[--data-plane-status]
<port>

.. option:: --fixed-ip subnet=<subnet>,ip-address=<ip-address>
@@ -398,6 +406,10 @@ Unset port properties

Remove the QoS policy attached to the port

.. option:: --data-plane-status

Clear existing information of data plane status

.. _port_unset-port:
.. describe:: <port>


+ 18
- 0
openstackclient/network/v2/port.py View File

@@ -685,6 +685,15 @@ class SetPort(command.Command):
"(Specify both --allowed-address and --no-allowed-address"
"to overwrite the current allowed-address pairs)")
)
parser.add_argument(
'--data-plane-status',
metavar='<status>',
choices=['ACTIVE', 'DOWN'],
help=_("Set data plane status of this port (ACTIVE | DOWN). "
"Unset it to None with the 'port unset' command "
"(requires data plane status extension)")
)

return parser

def take_action(self, parsed_args):
@@ -737,6 +746,8 @@ class SetPort(command.Command):
attrs['allowed_address_pairs'].extend(
_convert_address_pairs(parsed_args)
)
if parsed_args.data_plane_status:
attrs['data_plane_status'] = parsed_args.data_plane_status

client.update_port(obj, **attrs)

@@ -816,6 +827,11 @@ class UnsetPort(command.Command):
default=False,
help=_("Remove the QoS policy attached to the port")
)
parser.add_argument(
'--data-plane-status',
action='store_true',
help=_("Clear existing information of data plane status")
)

return parser

@@ -867,6 +883,8 @@ class UnsetPort(command.Command):
attrs['allowed_address_pairs'] = tmp_addr_pairs
if parsed_args.qos_policy:
attrs['qos_policy_id'] = None
if parsed_args.data_plane_status:
attrs['data_plane_status'] = None

if attrs:
client.update_port(obj, **attrs)

+ 1
- 0
openstackclient/tests/unit/network/v2/fakes.py View File

@@ -558,6 +558,7 @@ class FakePort(object):
'binding:vif_details': {},
'binding:vif_type': 'ovs',
'binding:vnic_type': 'normal',
'data_plane_status': None,
'description': 'description-' + uuid.uuid4().hex,
'device_id': 'device-id-' + uuid.uuid4().hex,
'device_owner': 'compute:nova',

+ 59
- 0
openstackclient/tests/unit/network/v2/test_port.py View File

@@ -44,6 +44,7 @@ class TestPort(network_fakes.TestNetworkV2):
'binding_vif_details',
'binding_vif_type',
'binding_vnic_type',
'data_plane_status',
'description',
'device_id',
'device_owner',
@@ -70,6 +71,7 @@ class TestPort(network_fakes.TestNetworkV2):
utils.format_dict(fake_port.binding_vif_details),
fake_port.binding_vif_type,
fake_port.binding_vnic_type,
fake_port.data_plane_status,
fake_port.description,
fake_port.device_id,
fake_port.device_owner,
@@ -1371,6 +1373,40 @@ class TestSetPort(TestPort):
self.network.update_port.assert_called_once_with(_testport, **attrs)
self.assertIsNone(result)

def test_set_port_data_plane_status(self):
_testport = network_fakes.FakePort.create_one_port(
{'data_plane_status': None})
self.network.find_port = mock.Mock(return_value=_testport)
arglist = [
'--data-plane-status', 'ACTIVE',
_testport.name,
]
verifylist = [
('data_plane_status', 'ACTIVE'),
('port', _testport.name),
]

parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)

attrs = {
'data_plane_status': 'ACTIVE',
}

self.network.update_port.assert_called_once_with(_testport, **attrs)
self.assertIsNone(result)

def test_set_port_invalid_data_plane_status_value(self):
arglist = [
'--data-plane-status', 'Spider-Man',
'test-port',
]
self.assertRaises(tests_utils.ParserException,
self.check_parser,
self.cmd,
arglist,
None)


class TestShowPort(TestPort):

@@ -1573,3 +1609,26 @@ class TestUnsetPort(TestPort):
self.assertRaises(exceptions.CommandError,
self.cmd.take_action,
parsed_args)

def test_unset_port_data_plane_status(self):
_fake_port = network_fakes.FakePort.create_one_port(
{'data_plane_status': 'ACTIVE'})
self.network.find_port = mock.Mock(return_value=_fake_port)
arglist = [
'--data-plane-status',
_fake_port.name,
]
verifylist = [
('data_plane_status', True),
('port', _fake_port.name),
]

parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)

attrs = {
'data_plane_status': None,
}

self.network.update_port.assert_called_once_with(_fake_port, **attrs)
self.assertIsNone(result)

+ 5
- 0
releasenotes/notes/bug-1684989-3bda158a822d2f73.yaml View File

@@ -0,0 +1,5 @@
---
features:
- Add ``--data-plane-status`` option to ``port set`` and ``port unset``
commands.
[Bug `1684989 <https://bugs.launchpad.net/bugs/1684989>`_]

Loading…
Cancel
Save