summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-07-13 02:44:35 +0000
committerGerrit Code Review <review@openstack.org>2017-07-13 02:44:35 +0000
commit894df67c67c688ea55bbdd2b91bc2a786c6f680b (patch)
tree800b899a21ccda4872353546ae173ffe9584ec68 /openstackclient
parentbca8d57eb3963beb74baa5d75e61954c610369d0 (diff)
parent1ae904a4912494b3d0ac87f22aaf958129744548 (diff)
downloadpython-openstackclient-894df67c67c688ea55bbdd2b91bc2a786c6f680b.tar.gz
Merge "Add 'data_plane_status' option to Port classes"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/port.py18
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py1
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py59
3 files changed, 78 insertions, 0 deletions
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index 42291bf2..1409a194 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -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)
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index 0b8eee90..98bda164 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -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',
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index 851bf25a..a8a6dba9 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -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)