Skip to content

Commit 92d0fbe

Browse files
committed
Add port security option to network commands
Add the "--enable-port-security" and "--disable-port-security" options to the "network create" and "network set" commands. This supports setting the default port security for ports created on a network. Change-Id: I1deb505bd77cef2e4bc3c2dbbb0c450665136f47 Implements: blueprint neutron-client
1 parent 6920c9e commit 92d0fbe

5 files changed

Lines changed: 82 additions & 0 deletions

File tree

doc/source/command-objects/network.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Create new network
2424
[--enable | --disable]
2525
[--share | --no-share]
2626
[--availability-zone-hint <availability-zone>]
27+
[--enable-port-security | --disable-port-security]
2728
[--external [--default | --no-default] | --internal]
2829
[--provider-network-type <provider-network-type>]
2930
[--provider-physical-network <provider-physical-network>]
@@ -72,6 +73,20 @@ Create new network
7273
7374
*Network version 2 only*
7475
76+
.. option:: --enable-port-security
77+
78+
Enable port security by default for ports created on
79+
this network (default)
80+
81+
*Network version 2 only*
82+
83+
.. option:: --disable-port-security
84+
85+
Disable port security by default for ports created on
86+
this network
87+
88+
*Network version 2 only*
89+
7590
.. option:: --subnet <subnet>
7691
7792
IPv4 subnet for fixed IPs (in CIDR notation)
@@ -191,6 +206,7 @@ Set network properties
191206
[--name <name>]
192207
[--enable | --disable]
193208
[--share | --no-share]
209+
[--enable-port-security | --disable-port-security]
194210
[--external [--default | --no-default] | --internal]
195211
[--provider-network-type <provider-network-type>]
196212
[--provider-physical-network <provider-physical-network>]
@@ -218,6 +234,16 @@ Set network properties
218234
219235
Do not share the network between projects
220236
237+
.. option:: --enable-port-security
238+
239+
Enable port security by default for ports created on
240+
this network
241+
242+
.. option:: --disable-port-security
243+
244+
Disable port security by default for ports created on
245+
this network
246+
221247
.. option:: --external
222248
223249
Set this network as an external network.

openstackclient/network/v2/network.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ def _get_attrs(client_manager, parsed_args):
5858
attrs['shared'] = True
5959
if parsed_args.no_share:
6060
attrs['shared'] = False
61+
if parsed_args.enable_port_security:
62+
attrs['port_security_enabled'] = True
63+
if parsed_args.disable_port_security:
64+
attrs['port_security_enabled'] = False
6165

6266
# "network set" command doesn't support setting project.
6367
if 'project' in parsed_args and parsed_args.project is not None:
@@ -197,6 +201,19 @@ def update_parser_network(self, parser):
197201
"(Network Availability Zone extension required, "
198202
"repeat option to set multiple availability zones)")
199203
)
204+
port_security_group = parser.add_mutually_exclusive_group()
205+
port_security_group.add_argument(
206+
'--enable-port-security',
207+
action='store_true',
208+
help=_("Enable port security by default for ports created on "
209+
"this network (default)")
210+
)
211+
port_security_group.add_argument(
212+
'--disable-port-security',
213+
action='store_true',
214+
help=_("Disable port security by default for ports created on "
215+
"this network")
216+
)
200217
external_router_grp = parser.add_mutually_exclusive_group()
201218
external_router_grp.add_argument(
202219
'--external',
@@ -403,6 +420,19 @@ def get_parser(self, prog_name):
403420
action='store_true',
404421
help=_("Do not share the network between projects")
405422
)
423+
port_security_group = parser.add_mutually_exclusive_group()
424+
port_security_group.add_argument(
425+
'--enable-port-security',
426+
action='store_true',
427+
help=_("Enable port security by default for ports created on "
428+
"this network")
429+
)
430+
port_security_group.add_argument(
431+
'--disable-port-security',
432+
action='store_true',
433+
help=_("Disable port security by default for ports created on "
434+
"this network")
435+
)
406436
external_router_grp = parser.add_mutually_exclusive_group()
407437
external_router_grp.add_argument(
408438
'--external',

openstackclient/tests/network/v2/fakes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ def create_one_network(attrs=None):
285285
'availability_zones': [],
286286
'availability_zone_hints': [],
287287
'is_default': False,
288+
'port_security_enabled': True,
288289
}
289290

290291
# Overwrite default attributes.
@@ -296,6 +297,8 @@ def create_one_network(attrs=None):
296297
# Set attributes with special mapping in OpenStack SDK.
297298
network.project_id = network_attrs['tenant_id']
298299
network.is_router_external = network_attrs['router:external']
300+
network.is_port_security_enabled = \
301+
network_attrs['port_security_enabled']
299302

300303
return network
301304

openstackclient/tests/network/v2/test_network.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
5555
'id',
5656
'is_default',
5757
'name',
58+
'port_security_enabled',
5859
'project_id',
5960
'provider_network_type',
6061
'router:external',
@@ -70,6 +71,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
7071
_network.id,
7172
_network.is_default,
7273
_network.name,
74+
_network.is_port_security_enabled,
7375
_network.project_id,
7476
_network.provider_network_type,
7577
network._format_router_external(_network.is_router_external),
@@ -151,6 +153,7 @@ def test_create_all_options(self):
151153
"--provider-physical-network", "physnet1",
152154
"--provider-segment", "400",
153155
"--transparent-vlan",
156+
"--enable-port-security",
154157
self._network.name,
155158
]
156159
verifylist = [
@@ -165,6 +168,7 @@ def test_create_all_options(self):
165168
('physical_network', 'physnet1'),
166169
('segmentation_id', '400'),
167170
('transparent_vlan', True),
171+
('enable_port_security', True),
168172
('name', self._network.name),
169173
]
170174

@@ -183,6 +187,7 @@ def test_create_all_options(self):
183187
'provider:physical_network': 'physnet1',
184188
'provider:segmentation_id': '400',
185189
'vlan_transparent': True,
190+
'port_security_enabled': True,
186191
})
187192
self.assertEqual(self.columns, columns)
188193
self.assertEqual(self.data, data)
@@ -191,13 +196,15 @@ def test_create_other_options(self):
191196
arglist = [
192197
"--enable",
193198
"--no-share",
199+
"--disable-port-security",
194200
self._network.name,
195201
]
196202
verifylist = [
197203
('enable', True),
198204
('no_share', True),
199205
('name', self._network.name),
200206
('external', False),
207+
('disable_port_security', True),
201208
]
202209

203210
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -207,6 +214,7 @@ def test_create_other_options(self):
207214
'admin_state_up': True,
208215
'name': self._network.name,
209216
'shared': False,
217+
'port_security_enabled': False,
210218
})
211219
self.assertEqual(self.columns, columns)
212220
self.assertEqual(self.data, data)
@@ -226,6 +234,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
226234
'id',
227235
'is_default',
228236
'name',
237+
'port_security_enabled',
229238
'project_id',
230239
'provider_network_type',
231240
'router:external',
@@ -241,6 +250,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
241250
_network.id,
242251
_network.is_default,
243252
_network.name,
253+
_network.is_port_security_enabled,
244254
_network.project_id,
245255
_network.provider_network_type,
246256
network._format_router_external(_network.is_router_external),
@@ -547,6 +557,7 @@ def test_set_this(self):
547557
'--provider-physical-network', 'physnet1',
548558
'--provider-segment', '400',
549559
'--no-transparent-vlan',
560+
'--enable-port-security',
550561
]
551562
verifylist = [
552563
('network', self._network.name),
@@ -559,6 +570,7 @@ def test_set_this(self):
559570
('physical_network', 'physnet1'),
560571
('segmentation_id', '400'),
561572
('no_transparent_vlan', True),
573+
('enable_port_security', True),
562574
]
563575

564576
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -574,6 +586,7 @@ def test_set_this(self):
574586
'provider:physical_network': 'physnet1',
575587
'provider:segmentation_id': '400',
576588
'vlan_transparent': False,
589+
'port_security_enabled': True,
577590
}
578591
self.network.update_network.assert_called_once_with(
579592
self._network, **attrs)
@@ -585,12 +598,14 @@ def test_set_that(self):
585598
'--disable',
586599
'--no-share',
587600
'--internal',
601+
'--disable-port-security',
588602
]
589603
verifylist = [
590604
('network', self._network.name),
591605
('disable', True),
592606
('no_share', True),
593607
('internal', True),
608+
('disable_port_security', True),
594609
]
595610

596611
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -600,6 +615,7 @@ def test_set_that(self):
600615
'admin_state_up': False,
601616
'shared': False,
602617
'router:external': False,
618+
'port_security_enabled': False,
603619
}
604620
self.network.update_network.assert_called_once_with(
605621
self._network, **attrs)
@@ -630,6 +646,7 @@ class TestShowNetwork(TestNetwork):
630646
'id',
631647
'is_default',
632648
'name',
649+
'port_security_enabled',
633650
'project_id',
634651
'provider_network_type',
635652
'router:external',
@@ -645,6 +662,7 @@ class TestShowNetwork(TestNetwork):
645662
_network.id,
646663
_network.is_default,
647664
_network.name,
665+
_network.is_port_security_enabled,
648666
_network.project_id,
649667
_network.provider_network_type,
650668
network._format_router_external(_network.is_router_external),

releasenotes/notes/bp-neutron-client-a0552f8ca909b665.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ features:
44
``port set`` commands to support JSON input for more advanced
55
binding profile data.
66
[Blueprint :oscbp:`neutron-client`]
7+
- Add ``--enable-port-security`` and ``--disable-port-security``
8+
options on the ``network create`` and ``network set`` commands.
9+
This supports setting the default port security for ports created
10+
on a network.
11+
[Blueprint :oscbp:`neutron-client`]
712
- Add ``geneve`` choice to the ``network create`` command
813
``--provider-network-type`` option.
914
[Blueprint :oscbp:`neutron-client`]

0 commit comments

Comments
 (0)