Support creating unaddress neutron port
Introduce an option '--no-fixed-ip' on port create command. If this option is specified and '--fixed-ip' is unspecified, OSC will send a request to neutron with 'fixed_ips' as an empty list, which will create an unaddress neutron port. Note: The use cases of unaddress port was outlined in: https://specs.openstack.org/openstack/neutron-specs/specs/liberty/unaddressed-port.html (dtroyer: add Depends-On for Zuul v3 test) Depends-On: I39e8e49243ab0bda631600715c971c55a34e2fd9 Change-Id: Ibe38598acbbcd0d353c952fc2a6fa67780762151 Closes-Bug: #1717829
This commit is contained in:
parent
a452c9d825
commit
de23ab8d75
@ -19,7 +19,7 @@ Create new port
|
||||
openstack port create
|
||||
--network <network>
|
||||
[--description <description>]
|
||||
[--fixed-ip subnet=<subnet>,ip-address=<ip-address>]
|
||||
[--fixed-ip subnet=<subnet>,ip-address=<ip-address> | --no-fixed-ip]
|
||||
[--device <device-id>]
|
||||
[--device-owner <device-owner>]
|
||||
[--vnic-type <vnic-type>]
|
||||
@ -50,6 +50,10 @@ Create new port
|
||||
subnet=<subnet>,ip-address=<ip-address>
|
||||
(repeat option to set multiple fixed IP addresses)
|
||||
|
||||
.. option:: --no-fixed-ip
|
||||
|
||||
No IP or subnet for this port
|
||||
|
||||
.. option:: --device <device-id>
|
||||
|
||||
Port device ID
|
||||
|
@ -302,7 +302,8 @@ class CreatePort(command.ShowOne):
|
||||
help=_("Network this port belongs to (name or ID)")
|
||||
)
|
||||
_add_updatable_args(parser)
|
||||
parser.add_argument(
|
||||
fixed_ip = parser.add_mutually_exclusive_group()
|
||||
fixed_ip.add_argument(
|
||||
'--fixed-ip',
|
||||
metavar='subnet=<subnet>,ip-address=<ip-address>',
|
||||
action=parseractions.MultiKeyValueAction,
|
||||
@ -311,6 +312,11 @@ class CreatePort(command.ShowOne):
|
||||
"subnet=<subnet>,ip-address=<ip-address> "
|
||||
"(repeat option to set multiple fixed IP addresses)")
|
||||
)
|
||||
fixed_ip.add_argument(
|
||||
'--no-fixed-ip',
|
||||
action='store_true',
|
||||
help=_("No IP or subnet for this port.")
|
||||
)
|
||||
parser.add_argument(
|
||||
'--binding-profile',
|
||||
metavar='<binding-profile>',
|
||||
@ -402,6 +408,8 @@ class CreatePort(command.ShowOne):
|
||||
|
||||
if parsed_args.fixed_ip:
|
||||
attrs['fixed_ips'] = parsed_args.fixed_ip
|
||||
elif parsed_args.no_fixed_ip:
|
||||
attrs['fixed_ips'] = []
|
||||
|
||||
if parsed_args.security_group:
|
||||
attrs['security_group_ids'] = [client.find_security_group(
|
||||
|
@ -356,6 +356,32 @@ class TestCreatePort(TestPort):
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
def test_create_with_no_fixed_ips(self):
|
||||
arglist = [
|
||||
'--network', self._port.network_id,
|
||||
'--no-fixed-ip',
|
||||
'test-port',
|
||||
]
|
||||
verifylist = [
|
||||
('network', self._port.network_id),
|
||||
('enable', True),
|
||||
('no_fixed_ip', True),
|
||||
('name', 'test-port'),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = (self.cmd.take_action(parsed_args))
|
||||
|
||||
self.network.create_port.assert_called_once_with(**{
|
||||
'admin_state_up': True,
|
||||
'network_id': self._port.network_id,
|
||||
'fixed_ips': [],
|
||||
'name': 'test-port',
|
||||
})
|
||||
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
def test_create_port_with_allowed_address_pair_ipaddr(self):
|
||||
pairs = [{'ip_address': '192.168.1.123'},
|
||||
{'ip_address': '192.168.1.45'}]
|
||||
|
5
releasenotes/notes/bug-1717829-c1de1d777d3abaf9.yaml
Normal file
5
releasenotes/notes/bug-1717829-c1de1d777d3abaf9.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Add ``--no-fixed-ip`` option to ``port create`` command.
|
||||
[Bug `1717829 <https://launchpad.net/bugs/1717829>`_]
|
Loading…
Reference in New Issue
Block a user