Skip to content

Commit 412b29b

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add port security option to network commands"
2 parents 07e97b1 + 92d0fbe commit 412b29b

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
@@ -56,6 +56,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
5656
'id',
5757
'is_default',
5858
'name',
59+
'port_security_enabled',
5960
'project_id',
6061
'provider_network_type',
6162
'router:external',
@@ -71,6 +72,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
7172
_network.id,
7273
_network.is_default,
7374
_network.name,
75+
_network.is_port_security_enabled,
7476
_network.project_id,
7577
_network.provider_network_type,
7678
network._format_router_external(_network.is_router_external),
@@ -144,6 +146,7 @@ def test_create_all_options(self):
144146
"--provider-physical-network", "physnet1",
145147
"--provider-segment", "400",
146148
"--transparent-vlan",
149+
"--enable-port-security",
147150
self._network.name,
148151
]
149152
verifylist = [
@@ -158,6 +161,7 @@ def test_create_all_options(self):
158161
('physical_network', 'physnet1'),
159162
('segmentation_id', '400'),
160163
('transparent_vlan', True),
164+
('enable_port_security', True),
161165
('name', self._network.name),
162166
]
163167

@@ -176,6 +180,7 @@ def test_create_all_options(self):
176180
'provider:physical_network': 'physnet1',
177181
'provider:segmentation_id': '400',
178182
'vlan_transparent': True,
183+
'port_security_enabled': True,
179184
})
180185
self.assertEqual(self.columns, columns)
181186
self.assertEqual(self.data, data)
@@ -184,13 +189,15 @@ def test_create_other_options(self):
184189
arglist = [
185190
"--enable",
186191
"--no-share",
192+
"--disable-port-security",
187193
self._network.name,
188194
]
189195
verifylist = [
190196
('enable', True),
191197
('no_share', True),
192198
('name', self._network.name),
193199
('external', False),
200+
('disable_port_security', True),
194201
]
195202

196203
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -200,6 +207,7 @@ def test_create_other_options(self):
200207
'admin_state_up': True,
201208
'name': self._network.name,
202209
'shared': False,
210+
'port_security_enabled': False,
203211
})
204212
self.assertEqual(self.columns, columns)
205213
self.assertEqual(self.data, data)
@@ -220,6 +228,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
220228
'id',
221229
'is_default',
222230
'name',
231+
'port_security_enabled',
223232
'project_id',
224233
'provider_network_type',
225234
'router:external',
@@ -235,6 +244,7 @@ class TestCreateNetworkIdentityV2(TestNetwork):
235244
_network.id,
236245
_network.is_default,
237246
_network.name,
247+
_network.is_port_security_enabled,
238248
_network.project_id,
239249
_network.provider_network_type,
240250
network._format_router_external(_network.is_router_external),
@@ -537,6 +547,7 @@ def test_set_this(self):
537547
'--provider-physical-network', 'physnet1',
538548
'--provider-segment', '400',
539549
'--no-transparent-vlan',
550+
'--enable-port-security',
540551
]
541552
verifylist = [
542553
('network', self._network.name),
@@ -549,6 +560,7 @@ def test_set_this(self):
549560
('physical_network', 'physnet1'),
550561
('segmentation_id', '400'),
551562
('no_transparent_vlan', True),
563+
('enable_port_security', True),
552564
]
553565

554566
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -564,6 +576,7 @@ def test_set_this(self):
564576
'provider:physical_network': 'physnet1',
565577
'provider:segmentation_id': '400',
566578
'vlan_transparent': False,
579+
'port_security_enabled': True,
567580
}
568581
self.network.update_network.assert_called_once_with(
569582
self._network, **attrs)
@@ -575,12 +588,14 @@ def test_set_that(self):
575588
'--disable',
576589
'--no-share',
577590
'--internal',
591+
'--disable-port-security',
578592
]
579593
verifylist = [
580594
('network', self._network.name),
581595
('disable', True),
582596
('no_share', True),
583597
('internal', True),
598+
('disable_port_security', True),
584599
]
585600

586601
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -590,6 +605,7 @@ def test_set_that(self):
590605
'admin_state_up': False,
591606
'shared': False,
592607
'router:external': False,
608+
'port_security_enabled': False,
593609
}
594610
self.network.update_network.assert_called_once_with(
595611
self._network, **attrs)
@@ -620,6 +636,7 @@ class TestShowNetwork(TestNetwork):
620636
'id',
621637
'is_default',
622638
'name',
639+
'port_security_enabled',
623640
'project_id',
624641
'provider_network_type',
625642
'router:external',
@@ -635,6 +652,7 @@ class TestShowNetwork(TestNetwork):
635652
_network.id,
636653
_network.is_default,
637654
_network.name,
655+
_network.is_port_security_enabled,
638656
_network.project_id,
639657
_network.provider_network_type,
640658
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)