Skip to content

Commit c82f423

Browse files
author
Hongbin Lu
committed
Support enable/disable uplink status propagation
Add options to enable/disable uplink status propagation on creating a neutron port. Related patches: * neutron: https://review.openstack.org/#/c/571899/ * openstacksdk: https://review.openstack.org/#/c/586687/ Depends-On: https://review.openstack.org/#/c/586687/ Change-Id: I095a98fc5f5aee62d979a16b3cd79d91ec3b9ddb Related-Bug: #1722720
1 parent 8be53a5 commit c82f423

5 files changed

Lines changed: 74 additions & 0 deletions

File tree

doc/source/cli/command-objects/port.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Create new port
2626
[--binding-profile <binding-profile>]
2727
[--host <host-id>]
2828
[--enable | --disable]
29+
[--enable-uplink-status-propagation | --disable-uplink-status-propagation]
2930
[--mac-address <mac-address>]
3031
[--security-group <security-group> | --no-security-group]
3132
[--dns-domain <dns-domain>]
@@ -87,6 +88,14 @@ Create new port
8788
8889
Disable port
8990
91+
.. option:: --enable-uplink-status-propagation
92+
93+
Enable uplink status propagate
94+
95+
.. option:: --disable-uplink-status-propagation
96+
97+
Disable uplink status propagate (default)
98+
9099
.. option:: --mac-address <mac-address>
91100
92101
MAC address of this port

openstackclient/network/v2/port.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ def _get_attrs(client_manager, parsed_args):
163163
attrs['qos_policy_id'] = client_manager.network.find_qos_policy(
164164
parsed_args.qos_policy, ignore_missing=False).id
165165

166+
if ('enable_uplink_status_propagation' in parsed_args and
167+
parsed_args.enable_uplink_status_propagation):
168+
attrs['propagate_uplink_status'] = True
169+
if ('disable_uplink_status_propagation' in parsed_args and
170+
parsed_args.disable_uplink_status_propagation):
171+
attrs['propagate_uplink_status'] = False
172+
166173
return attrs
167174

168175

@@ -349,6 +356,17 @@ def get_parser(self, prog_name):
349356
action='store_true',
350357
help=_("Disable port")
351358
)
359+
uplink_status_group = parser.add_mutually_exclusive_group()
360+
uplink_status_group.add_argument(
361+
'--enable-uplink-status-propagation',
362+
action='store_true',
363+
help=_("Enable uplink status propagate")
364+
)
365+
uplink_status_group.add_argument(
366+
'--disable-uplink-status-propagation',
367+
action='store_true',
368+
help=_("Disable uplink status propagate (default)")
369+
)
352370
parser.add_argument(
353371
'--project',
354372
metavar='<project>',

openstackclient/tests/unit/network/v2/fakes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,7 @@ def create_one_port(attrs=None):
581581
'tenant_id': 'project-id-' + uuid.uuid4().hex,
582582
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
583583
'tags': [],
584+
'uplink_status_propagation': False,
584585
}
585586

586587
# Overwrite default attributes.
@@ -600,6 +601,8 @@ def create_one_port(attrs=None):
600601
port.project_id = port_attrs['tenant_id']
601602
port.security_group_ids = port_attrs['security_group_ids']
602603
port.qos_policy_id = port_attrs['qos_policy_id']
604+
port.uplink_status_propagation = port_attrs[
605+
'uplink_status_propagation']
603606

604607
return port
605608

openstackclient/tests/unit/network/v2/test_port.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def _get_common_cols_data(fake_port):
6464
'security_group_ids',
6565
'status',
6666
'tags',
67+
'uplink_status_propagation',
6768
)
6869

6970
data = (
@@ -93,6 +94,7 @@ def _get_common_cols_data(fake_port):
9394
utils.format_list(fake_port.security_group_ids),
9495
fake_port.status,
9596
utils.format_list(fake_port.tags),
97+
fake_port.uplink_status_propagation,
9698
)
9799

98100
return columns, data
@@ -571,6 +573,43 @@ def test_create_with_tags(self):
571573
def test_create_with_no_tag(self):
572574
self._test_create_with_tag(add_tags=False)
573575

576+
def _test_create_with_uplink_status_propagation(self, enable=True):
577+
arglist = [
578+
'--network', self._port.network_id,
579+
'test-port',
580+
]
581+
if enable:
582+
arglist += ['--enable-uplink-status-propagation']
583+
else:
584+
arglist += ['--disable-uplink-status-propagation']
585+
verifylist = [
586+
('network', self._port.network_id,),
587+
('name', 'test-port'),
588+
]
589+
if enable:
590+
verifylist.append(('enable_uplink_status_propagation', True))
591+
else:
592+
verifylist.append(('disable_uplink_status_propagation', True))
593+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
594+
595+
columns, data = (self.cmd.take_action(parsed_args))
596+
597+
self.network.create_port.assert_called_once_with(**{
598+
'admin_state_up': True,
599+
'network_id': self._port.network_id,
600+
'propagate_uplink_status': enable,
601+
'name': 'test-port',
602+
})
603+
604+
self.assertEqual(self.columns, columns)
605+
self.assertEqual(self.data, data)
606+
607+
def test_create_with_uplink_status_propagation_enabled(self):
608+
self._test_create_with_uplink_status_propagation(enable=True)
609+
610+
def test_create_with_uplink_status_propagation_disabled(self):
611+
self._test_create_with_uplink_status_propagation(enable=False)
612+
574613

575614
class TestDeletePort(TestPort):
576615

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``--enable-uplink-status-propagation`` option and
5+
``--disable-uplink-status-propagation`` option to ``port create`` command.

0 commit comments

Comments
 (0)